lib/machine/src/world/manifest/schema.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const fabric = @import("../../fabric/root.zig");
2 const os = @import("os");
3 const std = @import("std");
4 const world = @import("../root.zig");
5
6 pub const magic = [8]u8{ 'M', 'C', 'H', 'W', 'R', 'L', '1', 0 };
7 pub const version: u16 = 1;
8 pub const flags: u16 = 0;
9 pub const format: u16 = 1;
10 pub const stream_bytes: usize = 1024;
11 pub const digest_bytes: u16 = os.abi.wire.digest_bytes;
12 pub const root_bytes: u16 = 192;
13 pub const node_bytes: u16 = 128;
14
15 pub const Envelope = struct {
16 pub const magic_offset: usize = 0;
17 pub const version_offset: usize = 8;
18 pub const stream_bytes_offset: usize = 10;
19 pub const flags_offset: usize = 12;
20 pub const format_offset: usize = 14;
21 pub const world_dialect_offset: usize = 16;
22 pub const fabric_dialect_offset: usize = 18;
23 pub const node_capacity_offset: usize = 20;
24 pub const node_bytes_offset: usize = 22;
25 pub const digest_bytes_offset: usize = 24;
26 pub const root_bytes_offset: usize = 26;
27 pub const reserved_offset: usize = 28;
28 pub const limit: usize = 64;
29 };
30
31 pub const RootLayout = struct {
32 pub const digest_offset: usize = Envelope.limit;
33 pub const dialect_offset: usize = digest_offset + digest_bytes;
34 pub const node_count_offset: usize = dialect_offset + 2;
35 pub const first_reserved_offset: usize = node_count_offset + 1;
36 pub const contract_offset: usize = first_reserved_offset + 5;
37 pub const fabric_digest_offset: usize = contract_offset + digest_bytes;
38 pub const fabric_dialect_offset: usize = fabric_digest_offset + digest_bytes;
39 pub const second_reserved_offset: usize = fabric_dialect_offset + 2;
40 pub const fabric_contract_offset: usize = second_reserved_offset + 6;
41 pub const entry_frontier_offset: usize = fabric_contract_offset + digest_bytes;
42 pub const admission_frontier_offset: usize = entry_frontier_offset + 8;
43 pub const fault_frontier_offset: usize = admission_frontier_offset + 8;
44 pub const third_reserved_offset: usize = fault_frontier_offset + 8;
45 pub const limit: usize = Envelope.limit + root_bytes;
46 };
47
48 pub const NodeLayout = struct {
49 pub const id_offset: usize = 0;
50 pub const root_digest_offset: usize = id_offset + 16;
51 pub const profile_digest_offset: usize = root_digest_offset + digest_bytes;
52 pub const state_digest_offset: usize = profile_digest_offset + digest_bytes;
53 pub const reserved_offset: usize = state_digest_offset + digest_bytes;
54 pub const limit: usize = node_bytes;
55 };
56
57 pub const nodes_offset: usize = RootLayout.limit;
58 pub const material_limit: usize = nodes_offset + world.node_limit * node_bytes;
59
60 comptime {
61 std.debug.assert(stream_bytes <= std.math.maxInt(u16));
62 std.debug.assert(world.node_limit == fabric.node_limit);
63 std.debug.assert(world.node_limit <= std.math.maxInt(u16));
64 std.debug.assert(@backingInt(world.Dialect.connected_world_v1) == 1);
65 std.debug.assert(@backingInt(fabric.Dialect.ordered_effect_fabric_v3) == 3);
66 std.debug.assert(RootLayout.first_reserved_offset == 99);
67 std.debug.assert(RootLayout.contract_offset == 104);
68 std.debug.assert(RootLayout.third_reserved_offset == 232);
69 std.debug.assert(RootLayout.limit == 256);
70 std.debug.assert(NodeLayout.reserved_offset == 112);
71 std.debug.assert(NodeLayout.limit == 128);
72 std.debug.assert(material_limit == 768);
73 std.debug.assert(material_limit <= stream_bytes);
74 }