diff options
| author | Robby Zambito <contact@robbyzambito.me> | 2025-12-31 03:11:42 +0000 |
|---|---|---|
| committer | Robby Zambito <contact@robbyzambito.me> | 2026-01-01 05:22:02 +0000 |
| commit | a78187603871238c154d2fec105eecbb15cee225 (patch) | |
| tree | 03dbd800f403eb51d9173166bbeb9dbf5bbe3341 /src/server/message_parser.zig | |
| parent | 0f138e5984cbebe64bc398513597d62f4e879b05 (diff) | |
Simplified a ton of things and cleaned up ownership
Diffstat (limited to 'src/server/message_parser.zig')
| -rw-r--r-- | src/server/message_parser.zig | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/server/message_parser.zig b/src/server/message_parser.zig index d238120..2165691 100644 --- a/src/server/message_parser.zig +++ b/src/server/message_parser.zig @@ -104,6 +104,12 @@ pub const Message = union(MessageType) { reply_to: ?[]const u8 = null, /// The message payload data. payload: []const u8, + + pub fn deinit(self: Pub, alloc: std.mem.Allocator) void { + alloc.free(self.subject); + alloc.free(self.payload); + if (self.reply_to) |r| alloc.free(r); + } }; pub const Sub = struct { /// The subject name to subscribe to. @@ -112,6 +118,12 @@ pub const Message = union(MessageType) { queue_group: ?[]const u8, /// A unique alphanumeric subscription ID, generated by the client. sid: []const u8, + + pub fn deinit(self: Sub, alloc: std.mem.Allocator) void { + alloc.free(self.subject); + alloc.free(self.sid); + if (self.queue_group) |q| alloc.free(q); + } }; pub const Unsub = struct { /// The unique alphanumeric subscription ID of the subject to unsubscribe from. @@ -124,6 +136,22 @@ pub const Message = union(MessageType) { sid: []const u8, reply_to: ?[]const u8, payload: []const u8, + + pub fn deinit(self: Msg, alloc: std.mem.Allocator) void { + alloc.free(self.subject); + alloc.free(self.sid); + alloc.free(self.payload); + if (self.reply_to) |r| alloc.free(r); + } + + pub fn dupe(self: Msg, alloc: std.mem.Allocator) !Msg { + return .{ + .subject = try alloc.dupe(u8, self.subject), + .sid = try alloc.dupe(u8, self.sid), + .reply_to = if (self.reply_to) |r| try alloc.dupe(u8, r) else null, + .payload = try alloc.dupe(u8, self.payload), + }; + } }; const client_types = std.StaticStringMap(MessageType).initComptime( |
