lib/wayland/src/protocol/bootstrap/callback.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const protocol = @import("../root.zig");
2
3 const core = protocol.core.wl_callback;
4
5 pub const Done = struct {
6 data: u32,
7 };
8
9 pub fn decodeEvent(
10 opcode: u16,
11 payload: []const u8,
12 descriptors: []const @import("sys").fd.Descriptor,
13 ) !Done {
14 const metadata = core.metadata.event(opcode) orelse return error.UnknownOpcode;
15 var decoder = try protocol.value.Decoder.init(metadata, payload, descriptors);
16 const done: Done = .{ .data = try decoder.unsigned() };
17 try decoder.finish();
18 return done;
19 }
20
21 test "callback done is a typed one-word event" {
22 const std = @import("std");
23
24 const payload = [_]u8{ 17, 0, 0, 0 };
25 try std.testing.expectEqual(@as(u32, 17), (try decodeEvent(0, &payload, &.{})).data);
26 try std.testing.expectError(error.UnknownOpcode, decodeEvent(1, &payload, &.{}));
27 }