From f00806d7f644fa4d847af8dfc13aca98c5563929 Mon Sep 17 00:00:00 2001 From: LeRoyce Pearson Date: Thu, 10 Aug 2023 19:27:47 -0600 Subject: [PATCH] Add support for serializing single enums --- examples/01_client_connect.zig | 2 +- src/core.zig | 3 +-- src/main.zig | 7 +++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/examples/01_client_connect.zig b/examples/01_client_connect.zig index a5e252f..ffb650b 100644 --- a/examples/01_client_connect.zig +++ b/examples/01_client_connect.zig @@ -287,7 +287,7 @@ pub fn main() !void { .width = framebuffer_size[0], .height = framebuffer_size[1], .stride = framebuffer_size[0] * @sizeOf([4]u8), - .format = @intFromEnum(wayland.core.Shm.Format.argb8888), + .format = .argb8888, } }, ); try socket.writeAll(std.mem.sliceAsBytes(message)); diff --git a/src/core.zig b/src/core.zig index fd22086..9e0857d 100644 --- a/src/core.zig +++ b/src/core.zig @@ -112,8 +112,7 @@ pub const ShmPool = struct { width: i32, height: i32, stride: i32, - // Shm.Format - format: u32, + format: Shm.Format, }, destroy: void, resize: struct { diff --git a/src/main.zig b/src/main.zig index 3f74ea4..663dc27 100644 --- a/src/main.zig +++ b/src/main.zig @@ -176,6 +176,13 @@ pub fn serializeArguments(comptime Signature: type, buffer: []u32, message: Sign buffer[pos] = @bitCast(@field(message, field.name)); pos += 1; }, + .Enum => |enum_info| if (enum_info.tag_type == u32) { + if (pos >= buffer.len) return error.OutOfMemory; + buffer[pos] = @intFromEnum(@field(message, field.name)); + pos += 1; + } else { + @compileError("Unsupported type " ++ @typeName(field.type)); + }, .Pointer => |ptr| switch (ptr.size) { .Slice => { const str = @field(message, field.name);