mirror of
https://github.com/zigzap/zap.git
synced 2025-10-21 07:34:08 +00:00
Update to Latest Zig
This commit is contained in:
parent
5b14759b4b
commit
2a63160c06
6 changed files with 81 additions and 62 deletions
20
build.zig
20
build.zig
|
@ -1,7 +1,7 @@
|
|||
const std = @import("std");
|
||||
const build_facilio = @import("facil.io/build.zig").build_facilio;
|
||||
|
||||
pub fn build(b: *std.build.Builder) !void {
|
||||
pub fn build(b: *std.Build) !void {
|
||||
const target = b.standardTargetOptions(.{});
|
||||
// Standard release options allow the person running `zig build` to select
|
||||
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
|
||||
|
@ -16,8 +16,8 @@ pub fn build(b: *std.build.Builder) !void {
|
|||
};
|
||||
|
||||
// create a module to be used internally.
|
||||
var zap_module = b.createModule(.{
|
||||
.source_file = .{ .path = "src/zap.zig" },
|
||||
const zap_module = b.createModule(.{
|
||||
.root_source_file = .{ .path = "src/zap.zig" },
|
||||
});
|
||||
|
||||
// register the module so it can be referenced using the package manager.
|
||||
|
@ -81,7 +81,7 @@ pub fn build(b: *std.build.Builder) !void {
|
|||
});
|
||||
|
||||
example.linkLibrary(facilio);
|
||||
example.addModule("zap", zap_module);
|
||||
example.root_module.addImport("zap", zap_module);
|
||||
|
||||
// const example_run = example.run();
|
||||
const example_run = b.addRunArtifact(example);
|
||||
|
@ -120,7 +120,7 @@ pub fn build(b: *std.build.Builder) !void {
|
|||
.optimize = optimize,
|
||||
});
|
||||
auth_tests.linkLibrary(facilio);
|
||||
auth_tests.addModule("zap", zap_module);
|
||||
auth_tests.root_module.addImport("zap", zap_module);
|
||||
|
||||
const run_auth_tests = b.addRunArtifact(auth_tests);
|
||||
const install_auth_tests = b.addInstallArtifact(auth_tests, .{});
|
||||
|
@ -133,7 +133,7 @@ pub fn build(b: *std.build.Builder) !void {
|
|||
.optimize = optimize,
|
||||
});
|
||||
mustache_tests.linkLibrary(facilio);
|
||||
mustache_tests.addModule("zap", zap_module);
|
||||
mustache_tests.root_module.addImport("zap", zap_module);
|
||||
|
||||
const run_mustache_tests = b.addRunArtifact(mustache_tests);
|
||||
const install_mustache_tests = b.addInstallArtifact(mustache_tests, .{});
|
||||
|
@ -147,7 +147,7 @@ pub fn build(b: *std.build.Builder) !void {
|
|||
});
|
||||
|
||||
httpparams_tests.linkLibrary(facilio);
|
||||
httpparams_tests.addModule("zap", zap_module);
|
||||
httpparams_tests.root_module.addImport("zap", zap_module);
|
||||
const run_httpparams_tests = b.addRunArtifact(httpparams_tests);
|
||||
// TODO: for some reason, tests aren't run more than once unless
|
||||
// dependencies have changed.
|
||||
|
@ -164,7 +164,7 @@ pub fn build(b: *std.build.Builder) !void {
|
|||
});
|
||||
|
||||
sendfile_tests.linkLibrary(facilio);
|
||||
sendfile_tests.addModule("zap", zap_module);
|
||||
sendfile_tests.root_module.addImport("zap", zap_module);
|
||||
const run_sendfile_tests = b.addRunArtifact(sendfile_tests);
|
||||
const install_sendfile_tests = b.addInstallArtifact(sendfile_tests, .{});
|
||||
|
||||
|
@ -197,7 +197,7 @@ pub fn build(b: *std.build.Builder) !void {
|
|||
//
|
||||
// pkghash
|
||||
//
|
||||
var pkghash_exe = b.addExecutable(.{
|
||||
const pkghash_exe = b.addExecutable(.{
|
||||
.name = "pkghash",
|
||||
.root_source_file = .{ .path = "./tools/pkghash.zig" },
|
||||
.target = target,
|
||||
|
@ -211,7 +211,7 @@ pub fn build(b: *std.build.Builder) !void {
|
|||
//
|
||||
// announceybot
|
||||
//
|
||||
var announceybot_exe = b.addExecutable(.{
|
||||
const announceybot_exe = b.addExecutable(.{
|
||||
.name = "announceybot",
|
||||
.root_source_file = .{ .path = "./tools/announceybot.zig" },
|
||||
.target = target,
|
||||
|
|
|
@ -1 +1,12 @@
|
|||
.{ .name = "zap", .version = "0.4.0" }
|
||||
.{
|
||||
.name = "zap",
|
||||
.version = "0.4.0",
|
||||
.paths = .{
|
||||
"build.zig",
|
||||
"build.zig.zon",
|
||||
"doc",
|
||||
"flake.nix",
|
||||
"src",
|
||||
"shell.nix",
|
||||
},
|
||||
}
|
||||
|
|
|
@ -2,11 +2,11 @@ const std = @import("std");
|
|||
|
||||
pub fn build_facilio(
|
||||
comptime subdir: []const u8,
|
||||
b: *std.build.Builder,
|
||||
target: std.zig.CrossTarget,
|
||||
b: *std.Build,
|
||||
target: std.Build.ResolvedTarget,
|
||||
optimize: std.builtin.OptimizeMode,
|
||||
use_openssl: bool,
|
||||
) !*std.build.CompileStep {
|
||||
) !*std.Build.Step.Compile {
|
||||
const lib = b.addStaticLibrary(.{
|
||||
.name = "facil.io",
|
||||
.target = target,
|
||||
|
@ -15,7 +15,7 @@ pub fn build_facilio(
|
|||
|
||||
// Generate flags
|
||||
var flags = std.ArrayList([]const u8).init(std.heap.page_allocator);
|
||||
if (lib.optimize != .Debug) try flags.append("-Os");
|
||||
if (lib.root_module.optimize != .Debug) try flags.append("-Os");
|
||||
try flags.append("-Wno-return-type-c-linkage");
|
||||
try flags.append("-fno-sanitize=undefined");
|
||||
|
||||
|
@ -26,7 +26,7 @@ pub fn build_facilio(
|
|||
//
|
||||
|
||||
try flags.append("-DFIO_HTTP_EXACT_LOGGING");
|
||||
if (target.getAbi() == .musl)
|
||||
if (target.result.abi == .musl)
|
||||
try flags.append("-D_LARGEFILE64_SOURCE");
|
||||
if (use_openssl)
|
||||
try flags.append("-DHAVE_OPENSSL -DFIO_TLS_FOUND");
|
||||
|
@ -42,30 +42,38 @@ pub fn build_facilio(
|
|||
lib.addIncludePath(.{ .path = subdir ++ "/lib/facil/tls" });
|
||||
|
||||
// C source files
|
||||
lib.addCSourceFiles(&.{
|
||||
subdir ++ "/lib/facil/fio.c",
|
||||
subdir ++ "/lib/facil/fio_zig.c",
|
||||
subdir ++ "/lib/facil/http/http.c",
|
||||
subdir ++ "/lib/facil/http/http1.c",
|
||||
subdir ++ "/lib/facil/http/websockets.c",
|
||||
subdir ++ "/lib/facil/http/http_internal.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_numbers.c",
|
||||
subdir ++ "/lib/facil/fiobj/fio_siphash.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_str.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_ary.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_data.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_hash.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_json.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobject.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_mustache.c",
|
||||
subdir ++ "/lib/facil/cli/fio_cli.c",
|
||||
}, flags.items);
|
||||
lib.addCSourceFiles(
|
||||
.{
|
||||
.files = &.{
|
||||
subdir ++ "/lib/facil/fio.c",
|
||||
subdir ++ "/lib/facil/fio_zig.c",
|
||||
subdir ++ "/lib/facil/http/http.c",
|
||||
subdir ++ "/lib/facil/http/http1.c",
|
||||
subdir ++ "/lib/facil/http/websockets.c",
|
||||
subdir ++ "/lib/facil/http/http_internal.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_numbers.c",
|
||||
subdir ++ "/lib/facil/fiobj/fio_siphash.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_str.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_ary.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_data.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_hash.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_json.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobject.c",
|
||||
subdir ++ "/lib/facil/fiobj/fiobj_mustache.c",
|
||||
subdir ++ "/lib/facil/cli/fio_cli.c",
|
||||
},
|
||||
.flags = flags.items,
|
||||
},
|
||||
);
|
||||
|
||||
if (use_openssl) {
|
||||
lib.addCSourceFiles(&.{
|
||||
subdir ++ "/lib/facil/tls/fio_tls_openssl.c",
|
||||
subdir ++ "/lib/facil/tls/fio_tls_missing.c",
|
||||
}, flags.items);
|
||||
lib.addCSourceFiles(.{
|
||||
.files = &.{
|
||||
subdir ++ "/lib/facil/tls/fio_tls_openssl.c",
|
||||
subdir ++ "/lib/facil/tls/fio_tls_missing.c",
|
||||
},
|
||||
.flags = flags.items,
|
||||
});
|
||||
}
|
||||
|
||||
// link against libc
|
||||
|
|
28
src/fio.zig
28
src/fio.zig
|
@ -118,10 +118,10 @@ pub const struct_fio_str_info_s = extern struct {
|
|||
pub const fio_str_info_s = struct_fio_str_info_s;
|
||||
pub extern fn http_send_body(h: [*c]http_s, data: ?*anyopaque, length: usize) c_int;
|
||||
pub fn fiobj_each1(arg_o: FIOBJ, arg_start_at: usize, arg_task: ?*const fn (FIOBJ, ?*anyopaque) callconv(.C) c_int, arg_arg: ?*anyopaque) callconv(.C) usize {
|
||||
var o = arg_o;
|
||||
var start_at = arg_start_at;
|
||||
var task = arg_task;
|
||||
var arg = arg_arg;
|
||||
const o = arg_o;
|
||||
const start_at = arg_start_at;
|
||||
const task = arg_task;
|
||||
const arg = arg_arg;
|
||||
if ((((o != 0) and ((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))) == @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 0)))))) and ((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6))))) != @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6)))))) and (fiobj_type_vtable(o).*.each != null)) return fiobj_type_vtable(o).*.each.?(o, start_at, task, arg);
|
||||
return 0;
|
||||
}
|
||||
|
@ -288,8 +288,8 @@ pub const fiobj_object_header_s = extern struct {
|
|||
ref: u32,
|
||||
};
|
||||
pub fn fiobj_type_is(arg_o: FIOBJ, arg_type: fiobj_type_enum) callconv(.C) usize {
|
||||
var o = arg_o;
|
||||
var @"type" = arg_type;
|
||||
const o = arg_o;
|
||||
const @"type" = arg_type;
|
||||
while (true) {
|
||||
switch (@as(c_int, @bitCast(@as(c_uint, @"type")))) {
|
||||
@as(c_int, 1) => return @as(usize, @bitCast(@as(c_long, @intFromBool(((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))) != 0) or (@as(c_int, @bitCast(@as(c_uint, @as([*c]fiobj_type_enum, @ptrFromInt(o))[@as(c_uint, @intCast(@as(c_int, 0)))]))) == FIOBJ_T_NUMBER))))),
|
||||
|
@ -311,7 +311,7 @@ pub fn fiobj_type_is(arg_o: FIOBJ, arg_type: fiobj_type_enum) callconv(.C) usize
|
|||
return @as(usize, @bitCast(@as(c_long, @intFromBool((((o != 0) and ((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))) == @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 0)))))) and ((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6))))) != @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6)))))) and (@as(c_int, @bitCast(@as(c_uint, @as([*c]fiobj_type_enum, @ptrCast(@alignCast(@as(?*anyopaque, @ptrFromInt(o & ~@as(usize, @bitCast(@as(c_long, @as(c_int, 7)))))))))[@as(c_uint, @intCast(@as(c_int, 0)))]))) == @as(c_int, @bitCast(@as(c_uint, @"type"))))))));
|
||||
}
|
||||
pub fn fiobj_type(arg_o: FIOBJ) callconv(.C) fiobj_type_enum {
|
||||
var o = arg_o;
|
||||
const o = arg_o;
|
||||
if (!(o != 0)) return @as(u8, @bitCast(@as(i8, @truncate(FIOBJ_T_NULL))));
|
||||
if ((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 1))))) != 0) return @as(u8, @bitCast(@as(i8, @truncate(FIOBJ_T_NUMBER))));
|
||||
if ((o & @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6))))) == @as(c_ulong, @bitCast(@as(c_long, @as(c_int, 6))))) return @as(u8, @bitCast(@as(u8, @truncate(o))));
|
||||
|
@ -326,7 +326,7 @@ pub extern const FIOBJECT_VTABLE_ARRAY: fiobj_object_vtable_s;
|
|||
pub extern const FIOBJECT_VTABLE_HASH: fiobj_object_vtable_s;
|
||||
pub extern const FIOBJECT_VTABLE_DATA: fiobj_object_vtable_s;
|
||||
pub fn fiobj_type_vtable(arg_o: FIOBJ) callconv(.C) [*c]const fiobj_object_vtable_s {
|
||||
var o = arg_o;
|
||||
const o = arg_o;
|
||||
while (true) {
|
||||
switch (@as(c_int, @bitCast(@as(c_uint, fiobj_type(o))))) {
|
||||
@as(c_int, 1) => return &FIOBJECT_VTABLE_NUMBER,
|
||||
|
@ -361,7 +361,7 @@ pub fn fiobj_obj2float(o: FIOBJ) callconv(.C) f64 {
|
|||
pub extern fn fio_ltocstr(c_long) fio_str_info_s;
|
||||
pub fn fiobj_obj2cstr(o: FIOBJ) callconv(.C) fio_str_info_s {
|
||||
if (!(o != 0)) {
|
||||
var ret: fio_str_info_s = fio_str_info_s{
|
||||
const ret: fio_str_info_s = fio_str_info_s{
|
||||
.capa = @as(usize, @bitCast(@as(c_long, @as(c_int, 0)))),
|
||||
.len = @as(usize, @bitCast(@as(c_long, @as(c_int, 4)))),
|
||||
.data = @as([*c]u8, @ptrFromInt(@intFromPtr("null"))),
|
||||
|
@ -374,7 +374,7 @@ pub fn fiobj_obj2cstr(o: FIOBJ) callconv(.C) fio_str_info_s {
|
|||
switch (@as(c_int, @bitCast(@as(c_uint, @as(u8, @bitCast(@as(u8, @truncate(o)))))))) {
|
||||
@as(c_int, 6) => {
|
||||
{
|
||||
var ret: fio_str_info_s = fio_str_info_s{
|
||||
const ret: fio_str_info_s = fio_str_info_s{
|
||||
.capa = @as(usize, @bitCast(@as(c_long, @as(c_int, 0)))),
|
||||
.len = @as(usize, @bitCast(@as(c_long, @as(c_int, 4)))),
|
||||
.data = @as([*c]u8, @ptrFromInt(@intFromPtr("null"))),
|
||||
|
@ -384,7 +384,7 @@ pub fn fiobj_obj2cstr(o: FIOBJ) callconv(.C) fio_str_info_s {
|
|||
},
|
||||
@as(c_int, 38) => {
|
||||
{
|
||||
var ret: fio_str_info_s = fio_str_info_s{
|
||||
const ret: fio_str_info_s = fio_str_info_s{
|
||||
.capa = @as(usize, @bitCast(@as(c_long, @as(c_int, 0)))),
|
||||
.len = @as(usize, @bitCast(@as(c_long, @as(c_int, 5)))),
|
||||
.data = @as([*c]u8, @ptrFromInt(@intFromPtr("false"))),
|
||||
|
@ -394,7 +394,7 @@ pub fn fiobj_obj2cstr(o: FIOBJ) callconv(.C) fio_str_info_s {
|
|||
},
|
||||
@as(c_int, 22) => {
|
||||
{
|
||||
var ret: fio_str_info_s = fio_str_info_s{
|
||||
const ret: fio_str_info_s = fio_str_info_s{
|
||||
.capa = @as(usize, @bitCast(@as(c_long, @as(c_int, 0)))),
|
||||
.len = @as(usize, @bitCast(@as(c_long, @as(c_int, 4)))),
|
||||
.data = @as([*c]u8, @ptrFromInt(@intFromPtr("true"))),
|
||||
|
@ -556,8 +556,8 @@ pub extern fn http_date2rfc7231(target: [*c]u8, tmbuf: [*c]struct_tm) usize;
|
|||
pub extern fn http_date2rfc2109(target: [*c]u8, tmbuf: [*c]struct_tm) usize;
|
||||
pub extern fn http_date2rfc2822(target: [*c]u8, tmbuf: [*c]struct_tm) usize;
|
||||
pub fn http_date2str(arg_target: [*c]u8, arg_tmbuf: [*c]struct_tm) callconv(.C) usize {
|
||||
var target = arg_target;
|
||||
var tmbuf = arg_tmbuf;
|
||||
const target = arg_target;
|
||||
const tmbuf = arg_tmbuf;
|
||||
return http_date2rfc7231(target, tmbuf);
|
||||
}
|
||||
pub extern fn http_time2str(target: [*c]u8, t: time_t) usize;
|
||||
|
|
|
@ -122,7 +122,7 @@ pub fn Basic(comptime Lookup: type, comptime kind: BasicAuthStrategy) type {
|
|||
);
|
||||
return .AuthFailed;
|
||||
}
|
||||
var decoded = buffer[0..decoded_size];
|
||||
const decoded = buffer[0..decoded_size];
|
||||
decoder.decode(decoded, encoded) catch |err| {
|
||||
zap.debug(
|
||||
"ERROR: UserPassAuth: unable to decode `{s}`: {any}\n",
|
||||
|
@ -400,7 +400,7 @@ pub fn UserPassSession(comptime Lookup: type, comptime lockedPwLookups: bool) ty
|
|||
lookup: *Lookup,
|
||||
args: UserPassSessionArgs,
|
||||
) !Self {
|
||||
var ret: Self = .{
|
||||
const ret: Self = .{
|
||||
.allocator = allocator,
|
||||
.settings = .{
|
||||
.usernameParam = try allocator.dupe(u8, args.usernameParam),
|
||||
|
|
|
@ -50,7 +50,7 @@ pub fn Handler(comptime ContextType: type) type {
|
|||
|
||||
/// This function will end the HTTP stage of the connection and attempt to "upgrade" to a WebSockets connection.
|
||||
pub fn upgrade(h: [*c]fio.http_s, settings: *WebSocketSettings) WebSocketError!void {
|
||||
var fio_settings: fio.websocket_settings_s = .{
|
||||
const fio_settings: fio.websocket_settings_s = .{
|
||||
.on_message = internal_on_message,
|
||||
.on_open = internal_on_open,
|
||||
.on_ready = internal_on_ready,
|
||||
|
@ -64,8 +64,8 @@ pub fn Handler(comptime ContextType: type) type {
|
|||
}
|
||||
|
||||
fn internal_on_message(handle: WsHandle, msg: fio.fio_str_info_s, is_text: u8) callconv(.C) void {
|
||||
var user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle))));
|
||||
var message = msg.data[0..msg.len];
|
||||
const user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle))));
|
||||
const message = msg.data[0..msg.len];
|
||||
if (user_provided_settings) |settings| {
|
||||
if (settings.on_message) |on_message| {
|
||||
on_message(settings.context, handle, message, is_text == 1);
|
||||
|
@ -74,7 +74,7 @@ pub fn Handler(comptime ContextType: type) type {
|
|||
}
|
||||
|
||||
fn internal_on_open(handle: WsHandle) callconv(.C) void {
|
||||
var user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle))));
|
||||
const user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle))));
|
||||
if (user_provided_settings) |settings| {
|
||||
if (settings.on_open) |on_open| {
|
||||
on_open(settings.context, handle);
|
||||
|
@ -83,7 +83,7 @@ pub fn Handler(comptime ContextType: type) type {
|
|||
}
|
||||
|
||||
fn internal_on_ready(handle: WsHandle) callconv(.C) void {
|
||||
var user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle))));
|
||||
const user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle))));
|
||||
if (user_provided_settings) |settings| {
|
||||
if (settings.on_ready) |on_ready| {
|
||||
on_ready(settings.context, handle);
|
||||
|
@ -92,7 +92,7 @@ pub fn Handler(comptime ContextType: type) type {
|
|||
}
|
||||
|
||||
fn internal_on_shutdown(handle: WsHandle) callconv(.C) void {
|
||||
var user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle))));
|
||||
const user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(fio.websocket_udata_get(handle))));
|
||||
if (user_provided_settings) |settings| {
|
||||
if (settings.on_shutdown) |on_shutdown| {
|
||||
on_shutdown(settings.context, handle);
|
||||
|
@ -101,7 +101,7 @@ pub fn Handler(comptime ContextType: type) type {
|
|||
}
|
||||
|
||||
fn internal_on_close(uuid: isize, udata: ?*anyopaque) callconv(.C) void {
|
||||
var user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(udata)));
|
||||
const user_provided_settings: ?*WebSocketSettings = @as(?*WebSocketSettings, @ptrCast(@alignCast(udata)));
|
||||
if (user_provided_settings) |settings| {
|
||||
if (settings.on_close) |on_close| {
|
||||
on_close(settings.context, uuid);
|
||||
|
@ -192,7 +192,7 @@ pub fn Handler(comptime ContextType: type) type {
|
|||
/// we need it to look up the ziggified callbacks.
|
||||
pub inline fn subscribe(handle: WsHandle, args: *SubscribeArgs) WebSocketError!usize {
|
||||
if (handle == null) return error.SubscribeError;
|
||||
var fio_args: fio.websocket_subscribe_s_zigcompat = .{
|
||||
const fio_args: fio.websocket_subscribe_s_zigcompat = .{
|
||||
.ws = handle.?,
|
||||
.channel = util.str2fio(args.channel),
|
||||
.on_message = if (args.on_message) |_| internal_subscription_on_message else null,
|
||||
|
|
Loading…
Add table
Reference in a new issue