diff options
author | Robby Zambito <contact@robbyzambito.me> | 2025-04-23 07:31:38 -0400 |
---|---|---|
committer | Robby Zambito <contact@robbyzambito.me> | 2025-04-26 09:47:07 -0400 |
commit | a1b3c07f0e59f3f56ae76fe4a43df3170ac78606 (patch) | |
tree | ca907c59a7c1ed05575b0d69b9be3ebd7186ebf6 | |
parent | b619d86665f351f143f10dfca16eeb357bb78be0 (diff) |
Convert from Zig struct to C struct
-rw-r--r-- | include/zaprus.h | 2 | ||||
-rw-r--r-- | src/c_api.zig | 35 |
2 files changed, 33 insertions, 4 deletions
diff --git a/include/zaprus.h b/include/zaprus.h index b442753..6856a5e 100644 --- a/include/zaprus.h +++ b/include/zaprus.h @@ -25,6 +25,7 @@ struct SaprusMessage { struct { char dest[4]; }; + size_t payload_len; char *payload; } relay; struct { @@ -36,6 +37,7 @@ struct SaprusMessage { char _reserved; char options; }; + size_t payload_len; char *payload; } connection; }; diff --git a/src/c_api.zig b/src/c_api.zig index 481dc78..a0343ae 100644 --- a/src/c_api.zig +++ b/src/c_api.zig @@ -4,11 +4,38 @@ const c = @cImport({ fn zigToCMessage(msg: ?*zaprus.Message) ?*c.SaprusMessage { if (msg) |m| { - return switch (m.*) { - .relay => |_| @constCast(&c.SaprusMessage{}), - .connection => |_| @constCast(&c.SaprusMessage{}), - else => |_| null, + var res = c.SaprusMessage{ + .packet_type = @intFromEnum(m.*), }; + switch (m.*) { + .relay => |r| { + res.unnamed_0 = .{ .relay = .{ + .unnamed_0 = .{ + .dest = r.header.dest, + }, + .payload_len = r.payload.len, + .payload = (allocator.alloc(u8, r.payload.len) catch return null).ptr, + } }; + }, + .connection => |con| { + res.unnamed_0 = .{ + .connection = .{ + .unnamed_0 = .{ + .src_port = con.header.src_port, + .dest_port = con.header.dest_port, + .seq_num = con.header.seq_num, + .msg_id = con.header.msg_id, + ._reserved = con.header.reserved, + .options = @bitCast(con.header.options), + }, + .payload_len = con.payload.len, + .payload = (allocator.alloc(u8, con.payload.len) catch return null).ptr, + }, + }; + }, + else => return null, + } + return &res; } else return null; } |