Skip to documentation
SLOP

tiny.wayland.wire

Reference tiny.wayland wire

Defined in tiny.wayland.

API (8)

Actions

Public operations.

Types and contracts

Public types and contracts.

Values and defaults

Public values and defaults.

No direct callersNo direct callstiny.waylandwire
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Called byCallstest sourcelib.wayland.src.stream.inboxtest: inbox preserves fragmented and ...stream.OutboxqueueOwnedtest sourcelib.wayland.src.wiretest: Wayland header round trips in h...wire.Headervalidatewire.Headerencode
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callstest sourcelib.wayland.src.stream.inboxtest: inbox preserves fragmented and ...stream.OutboxqueueOwnedtest sourcelib.wayland.src.wiretest: Wayland header rejects invalid ...wire.Headerinit
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callswire.Headerencodewiredecodewire.Headervalidate
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstest sourcelib.wayland.src.wiretest: Wayland header rejects invalid ...test sourcelib.wayland.src.wiretest: Wayland header round trips in h...wire.Headervalidatewiredecode
Static calls · unresolved targets: 0 · external targets: 1.

Source: lib/wayland/src/root.zig:69

zig
pub const wire = @import("wire.zig");

Source: lib/wayland/src/wire.zig

zig
const std = @import("std");const builtin = @import("builtin");pub const header_size = 8;pub const maximum_message_size = std.math.maxInt(u16) & ~@as(u16, 3);pub const Error = error{    IncompleteHeader,    InvalidObject,    InvalidSize,    MessageTooLarge,};pub const Header = struct {    object_id: u32,    opcode: u16,    size: u16,    pub fn init(object_id: u32, opcode: u16, payload_size: usize) Error!Header {        if (object_id == 0) return error.InvalidObject;        if (payload_size % 4 != 0) return error.InvalidSize;        if (payload_size > maximum_message_size - header_size) return error.MessageTooLarge;        const size = header_size + payload_size;        return .{            .object_id = object_id,            .opcode = opcode,            .size = @intCast(size),        };    }    pub fn encode(self: Header, destination: *[header_size]u8) Error!void {        try self.validate();        const second = @as(u32, self.size) << 16 | self.opcode;        std.mem.writeInt(u32, destination[0..4], self.object_id, builtin.cpu.arch.endian());        std.mem.writeInt(u32, destination[4..8], second, builtin.cpu.arch.endian());    }    pub fn validate(self: Header) Error!void {        if (self.object_id == 0) return error.InvalidObject;        if (self.size < header_size or self.size % 4 != 0) return error.InvalidSize;    }};pub fn decode(bytes: []const u8) Error!Header {    if (bytes.len < header_size) return error.IncompleteHeader;    const second = std.mem.readInt(u32, bytes[4..8], builtin.cpu.arch.endian());    const header: Header = .{        .object_id = std.mem.readInt(u32, bytes[0..4], builtin.cpu.arch.endian()),        .opcode = @truncate(second),        .size = @intCast(second >> 16),    };    try header.validate();    return header;}test "Wayland header round trips in host byte order" {    const expected: Header = .{ .object_id = 0x1234, .opcode = 7, .size = 20 };    var encoded: [header_size]u8 = undefined;    try expected.encode(&encoded);    try std.testing.expectEqual(expected, try decode(&encoded));}test "Wayland header rejects invalid object and size fields" {    try std.testing.expectError(error.InvalidObject, Header.init(0, 0, 0));    try std.testing.expectError(error.InvalidSize, Header.init(1, 0, 2));    try std.testing.expectError(error.MessageTooLarge, Header.init(1, 0, maximum_message_size));    var encoded: [header_size]u8 = @splat(0);    std.mem.writeInt(u32, encoded[0..4], 1, builtin.cpu.arch.endian());    std.mem.writeInt(u32, encoded[4..8], @as(u32, 6) << 16, builtin.cpu.arch.endian());    try std.testing.expectError(error.InvalidSize, decode(&encoded));}

Audit

Definitions9
Public names10
Members7
Version26.7.0
Revisiondaab053ee433