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 }