mirror of
https://git.robbyzambito.me/zaprus
synced 2025-12-20 16:24:50 +00:00
This commit is contained in:
@@ -33,7 +33,6 @@ pub const Error = error{
|
|||||||
pub const ZeroCopyMessage = packed struct {
|
pub const ZeroCopyMessage = packed struct {
|
||||||
pub const Relay = packed struct {
|
pub const Relay = packed struct {
|
||||||
dest: @Vector(4, u8),
|
dest: @Vector(4, u8),
|
||||||
/// @as([*]u8, @ptrCast(&payload))
|
|
||||||
payload: void,
|
payload: void,
|
||||||
};
|
};
|
||||||
pub const Connection = packed struct {
|
pub const Connection = packed struct {
|
||||||
@@ -52,30 +51,44 @@ pub const ZeroCopyMessage = packed struct {
|
|||||||
length: u16,
|
length: u16,
|
||||||
bytes: void = {},
|
bytes: void = {},
|
||||||
|
|
||||||
fn getRelay(self: *align(1) Self) *align(1) const Relay {
|
fn getRelay(self: *align(1) Self) *align(1) Relay {
|
||||||
return std.mem.bytesAsValue(Relay, &self.bytes);
|
return std.mem.bytesAsValue(Relay, &self.bytes);
|
||||||
}
|
}
|
||||||
fn getConnection(self: *align(1) Self) *align(1) const Connection {
|
fn getConnection(self: *align(1) Self) *align(1) Connection {
|
||||||
return std.mem.bytesAsValue(Connection, &self.bytes);
|
return std.mem.bytesAsValue(Connection, &self.bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn getSaprusTypePayload(self: *align(1) Self) Error!(union(PacketType) {
|
||||||
|
relay: *align(1) Relay,
|
||||||
|
file_transfer: void,
|
||||||
|
connection: *align(1) Connection,
|
||||||
|
}) {
|
||||||
|
return switch (self.type) {
|
||||||
|
.relay => .{ .relay = self.getRelay() },
|
||||||
|
.connection => .{ .connection = self.getConnection() },
|
||||||
|
.file_transfer => Error.NotImplementedSaprusType,
|
||||||
|
else => Error.UnknownSaprusType,
|
||||||
|
};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
test "testing variable length zero copy struct" {
|
test "testing variable length zero copy struct" {
|
||||||
const gpa = std.testing.allocator;
|
const gpa = std.testing.allocator;
|
||||||
const bytes = try gpa.alloc(u8, @sizeOf(ZeroCopyMessage) + 64);
|
const bytes = try gpa.alloc(u8, @sizeOf(ZeroCopyMessage) + 64);
|
||||||
defer gpa.free(bytes);
|
defer gpa.free(bytes);
|
||||||
// const zcm = std.mem.bytesAsValue(ZeroCopyMessage, bytes).*;
|
|
||||||
const zcm: *align(1) ZeroCopyMessage = @ptrCast(bytes.ptr);
|
const zcm: *align(1) ZeroCopyMessage = @ptrCast(bytes.ptr);
|
||||||
// @compileLog(@typeInfo(@TypeOf(ZeroCopyMessage{ .type = .relay, .length = 0 })));
|
|
||||||
// @compileLog(@typeInfo(@TypeOf(zcm)));
|
|
||||||
// _ = zcm;
|
|
||||||
zcm.type = .relay;
|
zcm.type = .relay;
|
||||||
zcm.length = 3;
|
zcm.length = 3;
|
||||||
std.debug.print("{any}\n", .{zcm});
|
std.debug.print("{any}\n", .{zcm});
|
||||||
|
std.debug.print("{any}\n", .{zcm.getSaprusTypePayload()});
|
||||||
|
if (false) {
|
||||||
std.debug.print("{any}\n", .{zcm.getRelay()});
|
std.debug.print("{any}\n", .{zcm.getRelay()});
|
||||||
std.debug.print("{any}\n", .{zcm.getConnection()});
|
std.debug.print("{any}\n", .{zcm.getConnection()});
|
||||||
std.debug.print("{x}\n", .{std.mem.asBytes(zcm.getConnection())});
|
|
||||||
std.debug.print("{x}\n", .{std.mem.asBytes(zcm.getRelay())});
|
std.debug.print("{x}\n", .{std.mem.asBytes(zcm.getRelay())});
|
||||||
|
std.debug.print("{x}\n", .{std.mem.asBytes(zcm.getConnection())});
|
||||||
|
}
|
||||||
std.debug.print("{x}\n", .{bytes});
|
std.debug.print("{x}\n", .{bytes});
|
||||||
|
|
||||||
try std.testing.expect(true);
|
try std.testing.expect(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user