Skip to content

Commit 53abff3

Browse files
committed
refactor(msgpack): use struct init methods
- Add init methods to Str, Bin, and EXT structs - Update wrapper functions to delegate to struct methods - Replace wrapper calls with direct struct method invocation
1 parent 4051975 commit 53abff3

File tree

2 files changed

+46
-31
lines changed

2 files changed

+46
-31
lines changed

src/msgpack.zig

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,11 @@ pub const DEFAULT_LIMITS = ParseLimits{};
120120
pub const Str = struct {
121121
str: []const u8,
122122

123+
/// Initialize a new Str instance
124+
pub inline fn init(str: []const u8) Str {
125+
return Str{ .str = str };
126+
}
127+
123128
/// get Str values
124129
pub fn value(self: Str) []const u8 {
125130
return self.str;
@@ -128,13 +133,18 @@ pub const Str = struct {
128133

129134
/// this is for encode str in struct
130135
pub inline fn wrapStr(str: []const u8) Str {
131-
return Str{ .str = str };
136+
return Str.init(str);
132137
}
133138

134139
/// the Bin Type
135140
pub const Bin = struct {
136141
bin: []u8,
137142

143+
/// Initialize a new Bin instance
144+
pub inline fn init(bin: []u8) Bin {
145+
return Bin{ .bin = bin };
146+
}
147+
138148
/// get bin values
139149
pub fn value(self: Bin) []u8 {
140150
return self.bin;
@@ -143,21 +153,26 @@ pub const Bin = struct {
143153

144154
/// this is wrapping for bin
145155
pub inline fn wrapBin(bin: []u8) Bin {
146-
return Bin{ .bin = bin };
156+
return Bin.init(bin);
147157
}
148158

149159
/// the EXT Type
150160
pub const EXT = struct {
151161
type: i8,
152162
data: []u8,
163+
164+
/// Initialize a new EXT instance
165+
pub inline fn init(t: i8, data: []u8) EXT {
166+
return EXT{
167+
.type = t,
168+
.data = data,
169+
};
170+
}
153171
};
154172

155173
/// t is type, data is data
156174
pub inline fn wrapEXT(t: i8, data: []u8) EXT {
157-
return EXT{
158-
.type = t,
159-
.data = data,
160-
};
175+
return EXT.init(t, data);
161176
}
162177

163178
/// the Timestamp Type
@@ -309,7 +324,7 @@ pub const Payload = union(enum) {
309324
// copy the value
310325
@memcpy(new_str, val);
311326
return Payload{
312-
.str = wrapStr(new_str),
327+
.str = Str.init(new_str),
313328
};
314329
}
315330

@@ -320,7 +335,7 @@ pub const Payload = union(enum) {
320335
// copy the value
321336
@memcpy(new_bin, val);
322337
return Payload{
323-
.bin = wrapBin(new_bin),
338+
.bin = Bin.init(new_bin),
324339
};
325340
}
326341

@@ -356,7 +371,7 @@ pub const Payload = union(enum) {
356371
// copy the value
357372
@memcpy(new_data, data);
358373
return Payload{
359-
.ext = wrapEXT(t, new_data),
374+
.ext = EXT.init(t, new_data),
360375
};
361376
}
362377

@@ -1187,7 +1202,7 @@ pub fn PackWithLimits(
11871202
}
11881203
var itera = map.iterator();
11891204
while (itera.next()) |entry| {
1190-
try self.writeStr(wrapStr(entry.key_ptr.*));
1205+
try self.writeStr(Str.init(entry.key_ptr.*));
11911206
try self.write(entry.value_ptr.*);
11921207
}
11931208
},
@@ -1948,7 +1963,7 @@ pub fn PackWithLimits(
19481963
return MsgPackError.StringTooLong;
19491964
}
19501965

1951-
current_payload = Payload{ .str = wrapStr(val) };
1966+
current_payload = Payload{ .str = Str.init(val) };
19521967
},
19531968
.BIN8, .BIN16, .BIN32 => {
19541969
const val = try self.readBinValue(marker, allocator);
@@ -1960,7 +1975,7 @@ pub fn PackWithLimits(
19601975
return MsgPackError.BinDataLengthTooLong;
19611976
}
19621977

1963-
current_payload = Payload{ .bin = wrapBin(val) };
1978+
current_payload = Payload{ .bin = Bin.init(val) };
19641979
},
19651980

19661981
// Container types: push to stack and continue

src/test.zig

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ test "bin write and read" {
129129

130130
// u8 bin
131131
var test_bin = "This is a string that is more than 32 bytes long.".*;
132-
try p.write(.{ .bin = msgpack.wrapBin(&test_bin) });
132+
try p.write(.{ .bin = msgpack.Bin.init(&test_bin) });
133133
const val = try p.read(allocator);
134134
defer val.free(allocator);
135135
try expect(u8eql(&test_bin, val.bin.value()));
@@ -468,7 +468,7 @@ test "ext different sizes" {
468468

469469
// Test fixext1
470470
var ext1_data = [1]u8{0x42};
471-
try p.write(.{ .ext = msgpack.wrapEXT(1, &ext1_data) });
471+
try p.write(.{ .ext = msgpack.EXT.init(1, &ext1_data) });
472472
{
473473
const val = try p.read(allocator);
474474
defer val.free(allocator);
@@ -484,7 +484,7 @@ test "ext different sizes" {
484484

485485
// Test fixext2
486486
var ext2_data = [2]u8{ 0x42, 0x43 };
487-
try p.write(.{ .ext = msgpack.wrapEXT(2, &ext2_data) });
487+
try p.write(.{ .ext = msgpack.EXT.init(2, &ext2_data) });
488488
{
489489
const val = try p.read(allocator);
490490
defer val.free(allocator);
@@ -500,7 +500,7 @@ test "ext different sizes" {
500500

501501
// Test fixext4
502502
var ext4_data = [4]u8{ 0x42, 0x43, 0x44, 0x45 };
503-
try p.write(.{ .ext = msgpack.wrapEXT(3, &ext4_data) });
503+
try p.write(.{ .ext = msgpack.EXT.init(3, &ext4_data) });
504504
{
505505
const val = try p.read(allocator);
506506
defer val.free(allocator);
@@ -516,7 +516,7 @@ test "ext different sizes" {
516516

517517
// Test fixext8
518518
var ext8_data = [8]u8{ 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49 };
519-
try p.write(.{ .ext = msgpack.wrapEXT(4, &ext8_data) });
519+
try p.write(.{ .ext = msgpack.EXT.init(4, &ext8_data) });
520520
{
521521
const val = try p.read(allocator);
522522
defer val.free(allocator);
@@ -532,7 +532,7 @@ test "ext different sizes" {
532532

533533
// Test fixext16
534534
var ext16_data = [16]u8{ 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51 };
535-
try p.write(.{ .ext = msgpack.wrapEXT(5, &ext16_data) });
535+
try p.write(.{ .ext = msgpack.EXT.init(5, &ext16_data) });
536536
{
537537
const val = try p.read(allocator);
538538
defer val.free(allocator);
@@ -904,7 +904,7 @@ test "bin16 and bin32 write and read" {
904904
byte.* = @intCast(i % 256);
905905
}
906906

907-
try p.write(.{ .bin = msgpack.wrapBin(test_bin16) });
907+
try p.write(.{ .bin = msgpack.Bin.init(test_bin16) });
908908
{
909909
const val = try p.read(allocator);
910910
defer val.free(allocator);
@@ -926,7 +926,7 @@ test "bin16 and bin32 write and read" {
926926
byte.* = @intCast(i % 256);
927927
}
928928

929-
try p.write(.{ .bin = msgpack.wrapBin(test_bin32) });
929+
try p.write(.{ .bin = msgpack.Bin.init(test_bin32) });
930930
{
931931
const val = try p.read(allocator);
932932
defer val.free(allocator);
@@ -1182,7 +1182,7 @@ test "ext8 ext16 ext32 formats" {
11821182
byte.* = @intCast(i % 256);
11831183
}
11841184

1185-
try p.write(.{ .ext = msgpack.wrapEXT(10, ext8_data) });
1185+
try p.write(.{ .ext = msgpack.EXT.init(10, ext8_data) });
11861186
{
11871187
const val = try p.read(allocator);
11881188
defer val.free(allocator);
@@ -1205,7 +1205,7 @@ test "ext8 ext16 ext32 formats" {
12051205
byte.* = @intCast(i % 256);
12061206
}
12071207

1208-
try p.write(.{ .ext = msgpack.wrapEXT(20, ext16_data) });
1208+
try p.write(.{ .ext = msgpack.EXT.init(20, ext16_data) });
12091209
{
12101210
const val = try p.read(allocator);
12111211
defer val.free(allocator);
@@ -1228,7 +1228,7 @@ test "ext8 ext16 ext32 formats" {
12281228
byte.* = @intCast(i % 256);
12291229
}
12301230

1231-
try p.write(.{ .ext = msgpack.wrapEXT(30, ext32_data) });
1231+
try p.write(.{ .ext = msgpack.EXT.init(30, ext32_data) });
12321232
{
12331233
const val = try p.read(allocator);
12341234
defer val.free(allocator);
@@ -1374,7 +1374,7 @@ test "ext negative type ids" {
13741374
var test_data = [4]u8{ 0x01, 0x02, 0x03, 0x04 };
13751375
const negative_type: i8 = -42;
13761376

1377-
try p.write(.{ .ext = msgpack.wrapEXT(negative_type, &test_data) });
1377+
try p.write(.{ .ext = msgpack.EXT.init(negative_type, &test_data) });
13781378
const val = try p.read(allocator);
13791379
defer val.free(allocator);
13801380

@@ -1388,7 +1388,7 @@ test "ext negative type ids" {
13881388
p = pack.init(&write_buffer, &read_buffer);
13891389

13901390
const min_type: i8 = -128;
1391-
try p.write(.{ .ext = msgpack.wrapEXT(min_type, &test_data) });
1391+
try p.write(.{ .ext = msgpack.EXT.init(min_type, &test_data) });
13921392
const val2 = try p.read(allocator);
13931393
defer val2.free(allocator);
13941394

@@ -2103,7 +2103,7 @@ test "bin and str type compatibility" {
21032103

21042104
// Test binary data uses bin format
21052105
var binary_data = [_]u8{ 0xff, 0xfe, 0xfd, 0xfc, 0xfb };
2106-
try p.write(.{ .bin = msgpack.wrapBin(&binary_data) });
2106+
try p.write(.{ .bin = msgpack.Bin.init(&binary_data) });
21072107

21082108
// Verify bin8 format (0xc4) is used
21092109
try expect(arr[0] == 0xc4);
@@ -2131,13 +2131,13 @@ test "extension type reserved range" {
21312131

21322132
// Test application-defined types (0-127)
21332133
var app_data = [_]u8{ 0x01, 0x02 };
2134-
try p.write(.{ .ext = msgpack.wrapEXT(0, &app_data) });
2135-
try p.write(.{ .ext = msgpack.wrapEXT(127, &app_data) });
2134+
try p.write(.{ .ext = msgpack.EXT.init(0, &app_data) });
2135+
try p.write(.{ .ext = msgpack.EXT.init(127, &app_data) });
21362136

21372137
// Test predefined types (-128 to -1)
2138-
try p.write(.{ .ext = msgpack.wrapEXT(-128, &app_data) });
2138+
try p.write(.{ .ext = msgpack.EXT.init(-128, &app_data) });
21392139
// -1 is timestamp, already covered in other tests
2140-
try p.write(.{ .ext = msgpack.wrapEXT(-2, &app_data) });
2140+
try p.write(.{ .ext = msgpack.EXT.init(-2, &app_data) });
21412141

21422142
// Read back and verify type values remain correct
21432143
read_buffer = fixedBufferStream(&arr);
@@ -2179,7 +2179,7 @@ test "sequential read write multiple objects" {
21792179
try p.write(str);
21802180

21812181
var bin_data = [_]u8{ 1, 2, 3 };
2182-
try p.write(.{ .bin = msgpack.wrapBin(&bin_data) });
2182+
try p.write(.{ .bin = msgpack.Bin.init(&bin_data) });
21832183

21842184
var test_arr = try Payload.arrPayload(2, allocator);
21852185
defer test_arr.free(allocator);

0 commit comments

Comments
 (0)