lib/choir/src/composition/abi/contract.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 const source = @import("../source/root.zig");
 3 
 4 pub const version: u32 = 1;
 5 pub const invoke_symbol = "choir_compose_invoke_v1";
 6 pub const max_resources: u32 = 1024;
 7 
 8 pub const Status = enum(u32) {
 9     ok = 0,
10     incompatible_context = 1,
11     incompatible_frame = 2,
12     unknown_call_site = 3,
13     missing_fragment = 4,
14     invalid_resource = 5,
15     fragment_failure = 6,
16     composition_closing = 7,
17 };
18 
19 pub const Access = source.Access;
20 
21 pub fn decodeStatus(raw: anytype) Status {
22     const value = std.math.cast(u32, raw) orelse return .fragment_failure;
23     inline for (std.meta.tags(Status)) |status| {
24         if (value == @backingInt(status)) return status;
25     }
26     return .fragment_failure;
27 }
28 
29 pub fn decodeAccess(raw: u32) ?Access {
30     inline for (std.meta.tags(Access)) |access| {
31         if (raw == @backingInt(access)) return access;
32     }
33     return null;
34 }