diff options
| author | Robby Zambito <contact@robbyzambito.me> | 2025-12-08 21:09:15 -0500 |
|---|---|---|
| committer | Robby Zambito <contact@robbyzambito.me> | 2025-12-08 21:09:16 -0500 |
| commit | 1eeb55ff4defe4bfaeaadaa62146604562ee0ea4 (patch) | |
| tree | 5cb39717204173482be8bdce8f42856eb1bba503 /src/server/message_parser.zig | |
| parent | 826da348a51c0650394e564850e9a0c65c1cfeea (diff) | |
Made progress, but not perfect.
the message isn't crossing container boundaries, but it works in the
test!
Diffstat (limited to 'src/server/message_parser.zig')
| -rw-r--r-- | src/server/message_parser.zig | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/server/message_parser.zig b/src/server/message_parser.zig index e791d14..5669d2a 100644 --- a/src/server/message_parser.zig +++ b/src/server/message_parser.zig @@ -13,6 +13,7 @@ pub const MessageType = enum { pong, @"+ok", @"-err", + eos, fn parseMemEql(input: []const u8) ?MessageType { // if (std.mem.eql(u8, "INFO", input)) return .info; @@ -44,6 +45,9 @@ pub const Message = union(MessageType) { pong, @"+ok": void, @"-err": void, + // Not an actual NATS message, but used to signal end of stream was reached in the input, + // and we should close the reader. + eos: void, pub const ServerInfo = struct { /// The unique identifier of the NATS server. server_id: []const u8, @@ -75,7 +79,7 @@ pub const Message = union(MessageType) { allocator: std.heap.ArenaAllocator, connect: Connect, - pub fn deinit(self: *AllocatedConnect) void { + pub fn deinit(self: AllocatedConnect) void { self.allocator.deinit(); } }; @@ -166,7 +170,14 @@ pub const Message = union(MessageType) { try operation_string.appendBounded(byte); try in.discardAll(1); } else break; - } else |err| return err; + } else |err| switch (err) { + error.EndOfStream => { + return .{ .eos = {} }; + }, + else => { + return err; + }, + } const operation = parse(operation_string.items) orelse { return error.InvalidOperation; |
