summaryrefslogtreecommitdiff
path: root/src/server/message_parser.zig
diff options
context:
space:
mode:
authorRobby Zambito <contact@robbyzambito.me>2025-12-31 03:11:42 +0000
committerRobby Zambito <contact@robbyzambito.me>2026-01-01 05:22:02 +0000
commita78187603871238c154d2fec105eecbb15cee225 (patch)
tree03dbd800f403eb51d9173166bbeb9dbf5bbe3341 /src/server/message_parser.zig
parent0f138e5984cbebe64bc398513597d62f4e879b05 (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.zig28
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(