Properly initialize the SaprusMessage fromBytes

Will actually use the provided packet type inline.
This commit is contained in:
2025-04-03 16:00:24 -04:00
parent a0f6e08794
commit ef36894c70

View File

@@ -84,7 +84,13 @@ const SaprusMessage = union(SaprusPacketType) {
} }
}; };
inline fn toBytesAux(comptime Header: type, header: Header, payload: []const u8, w: std.ArrayList(u8).Writer, allocator: Allocator) !void { inline fn toBytesAux(
comptime Header: type,
header: Header,
payload: []const u8,
w: std.ArrayList(u8).Writer,
allocator: Allocator,
) !void {
const payload_list = try encodeToList(payload, allocator); const payload_list = try encodeToList(payload, allocator);
defer payload_list.deinit(); defer payload_list.deinit();
@@ -93,26 +99,20 @@ inline fn toBytesAux(comptime Header: type, header: Header, payload: []const u8,
try w.writeAll(payload_list.items); try w.writeAll(payload_list.items);
} }
inline fn fromBytesAux(comptime Packet: SaprusPacketType, comptime Header: type, r: StringReader, allocator: Allocator) !SaprusMessage { inline fn fromBytesAux(
comptime packet: SaprusPacketType,
comptime Header: type,
r: StringReader,
allocator: Allocator,
) !SaprusMessage {
const header = try r.readStructEndian(Header, .big); const header = try r.readStructEndian(Header, .big);
const len = try r.readInt(u16, .big); const len = try r.readInt(u16, .big);
const payload = try decodeFromReader(r, len, allocator); const payload = try decodeFromReader(r, len, allocator);
return switch (Packet) { return @unionInit(SaprusMessage, @tagName(packet), .{
.relay => SaprusMessage{ .header = header,
.relay = .{ .payload = payload,
.header = header, });
.payload = payload,
},
},
.connection => SaprusMessage{
.connection = .{
.header = header,
.payload = payload,
},
},
else => unreachable,
};
} }
pub fn main() !void { pub fn main() !void {