From 935d00dcc2081a2e21eda70a203dc560ccf48935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mustafa=20Dokumac=C4=B1?= Date: Mon, 30 Mar 2026 22:24:47 +0000 Subject: [PATCH] feat(Payload): add deepClone method for Payload struct --- src/msgpack.zig | 5 +++++ src/test.zig | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/msgpack.zig b/src/msgpack.zig index db78b5c..834621a 100644 --- a/src/msgpack.zig +++ b/src/msgpack.zig @@ -1143,6 +1143,11 @@ pub const Payload = union(enum) { try self.map.put(key, val); } + /// deep clone a Payload, allocating owned copies for dynamic data + pub fn deepClone(self: Payload, allocator: Allocator) !Payload { + return clonePayload(self, allocator); + } + /// get a NIL payload pub inline fn nilToPayload() Payload { return Payload{ diff --git a/src/test.zig b/src/test.zig index b4e45ed..5f8a350 100644 --- a/src/test.zig +++ b/src/test.zig @@ -1151,6 +1151,11 @@ test "payload utility methods" { try expect(ext_payload.ext.type == 1); try expect(u8eql("extdata", ext_payload.ext.data)); + const cloned_str_payload = try str_payload.deepClone(allocator); + defer cloned_str_payload.free(allocator); + try expect(u8eql("test", cloned_str_payload.str.value())); + try expect(@ptrToInt(str_payload.str.value().ptr) != @ptrToInt(cloned_str_payload.str.value().ptr)); + const arr_payload = try Payload.arrPayload(3, allocator); defer arr_payload.free(allocator); try expect((try arr_payload.getArrLen()) == 3);