mirror of
https://git.robbyzambito.me/zaprus
synced 2025-12-20 16:24:50 +00:00
Properly initialize the SaprusMessage fromBytes
Will actually use the provided packet type inline.
This commit is contained in:
34
src/main.zig
34
src/main.zig
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user