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 }