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 }