feat(encode): add byte encoding helpers and record types

This commit is contained in:
dualfroz committed 2026-08-23 12:25:00 +02:00
1 parent e7f0e47199
commit 9aaf5de4ce
1 file changed
+55
+55
View File
@@ -0,0 +1,55 @@
const std = @import("std");
pub const endian = std.builtin.Endian.little;
pub const Kind = enum(u8) {
value = 0,
tombstone = 1,
};
pub const Record = struct {
key: []const u8,
value: []const u8,
seq: u64,
kind: Kind,
};
pub const ByteWriter = struct {
buf: *std.ArrayList(u8),
pub fn init(buf: *std.ArrayList(u8)) ByteWriter {
return .{ .buf = buf };
}
pub fn byte(self: ByteWriter, v: u8) !void {
try self.buf.append(v);
}
pub fn putU32(self: ByteWriter, v: u32) !void {
var b: [4]u8 = undefined;
std.mem.writeInt(u32, &b, v, endian);
try self.buf.appendSlice(&b);
}
pub fn putU64(self: ByteWriter, v: u64) !void {
var b: [8]u8 = undefined;
std.mem.writeInt(u64, &b, v, endian);
try self.buf.appendSlice(&b);
}
pub fn slice(self: ByteWriter, v: []const u8) !void {
try self.buf.appendSlice(v);
}
};
pub fn readU32(data: []const u8, pos: usize) u32 {
return std.mem.readInt(u32, data[pos..][0..4], endian);
}
pub fn readU64(data: []const u8, pos: usize) u64 {
return std.mem.readInt(u64, data[pos..][0..8], endian);
}
pub fn crc(data: []const u8) u32 {
return std.hash.Crc32.hash(data);
}