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

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const contract = @import("contract.zig");
 2 
 3 const Status = contract.Status;
 4 
 5 /// Stable header that binds a frame to one loaded composition.
 6 pub const Context = extern struct {
 7     version: u32,
 8     byte_size: u32,
 9     owner_address: u64,
10     owner_cookie: u64,
11 
12     pub fn init(owner_address: u64, owner_cookie: u64) Context {
13         return .{
14             .version = contract.version,
15             .byte_size = @sizeOf(Context),
16             .owner_address = owner_address,
17             .owner_cookie = owner_cookie,
18         };
19     }
20 
21     pub fn validate(self: *const Context) Status {
22         if (self.version != contract.version or self.byte_size < @sizeOf(Context)) return .incompatible_context;
23         if (self.owner_address == 0 or self.owner_cookie == 0) return .incompatible_context;
24         return .ok;
25     }
26 };