lib/machine/src/instance/delivery.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const admission = @import("../admission/root.zig");
 2 const os = @import("os");
 3 
 4 pub const Error = os.abi.message.Error;
 5 
 6 pub fn encode(
 7     fence: os.abi.ActivationFence,
 8     sequence: u64,
 9     value: *const admission.Admission,
10     output: *os.abi.MessageWire,
11 ) Error!void {
12     switch (value.record) {
13         .terminal => |record| {
14             if (record.length > record.storage.len) {
15                 return error.PayloadCapacityExceeded;
16             }
17             try os.abi.encodeRequest(
18                 fence,
19                 sequence,
20                 0,
21                 .{ .terminal_bytes = .{
22                     .offset = record.offset,
23                     .bytes = record.storage[0..record.length],
24                 } },
25                 output,
26             );
27         },
28         .virtual_time => |record| try os.abi.encodeRequest(
29             fence,
30             sequence,
31             0,
32             .{ .virtual_time = .{
33                 .from_tick = record.from_tick,
34                 .to_tick = record.to_tick,
35             } },
36             output,
37         ),
38         .entropy => |record| {
39             if (record.length > record.storage.len) {
40                 return error.PayloadCapacityExceeded;
41             }
42             try os.abi.encodeRequest(
43                 fence,
44                 sequence,
45                 0,
46                 .{ .entropy = .{
47                     .generation = record.generation,
48                     .bytes = record.storage[0..record.length],
49                 } },
50                 output,
51             );
52         },
53         .effect_result => |record| {
54             if (record.length > record.storage.len) {
55                 return error.PayloadCapacityExceeded;
56             }
57             try os.abi.encodeRequest(
58                 fence,
59                 sequence,
60                 record.request.correlation,
61                 .{ .effect_result = .{
62                     .status = record.status,
63                     .output_root = record.output_root,
64                     .bytes = record.storage[0..record.length],
65                 } },
66                 output,
67             );
68         },
69     }
70 }