Skip to main content

nomiscript/runtime/
entity_layout.rs

1//! Auto-generated from doc/scripting/entity_registry.org.
2//! Do not edit manually — edit the org file + cargo build.
3//!
4//! Name-bearing entity field layout for the host value decoder.
5//! Field ORDER matches the wasm struct slot order in `ENTITY_SPECS`
6//! (accessor rows, then struct-only extras), so a field's position
7//! here is its `struct.get` index.
8
9use crate::ast::EntityKind;
10
11#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12pub enum EntityFieldKind {
13    String,
14    Ratio,
15    I32,
16    Pair,
17}
18
19#[derive(Debug, Clone, Copy)]
20pub struct EntityFieldLayout {
21    pub name: &'static str,
22    pub kind: EntityFieldKind,
23}
24
25#[derive(Debug, Clone, Copy)]
26pub struct EntityLayout {
27    pub kind: EntityKind,
28    pub label: &'static str,
29    pub fields: &'static [EntityFieldLayout],
30}
31
32pub const ENTITY_LAYOUTS: &[EntityLayout] = &[
33    EntityLayout {
34        kind: EntityKind::Account,
35        label: "account",
36        fields: &[
37            EntityFieldLayout {
38                name: "id",
39                kind: EntityFieldKind::String,
40            },
41            EntityFieldLayout {
42                name: "name",
43                kind: EntityFieldKind::String,
44            },
45            EntityFieldLayout {
46                name: "parent",
47                kind: EntityFieldKind::String,
48            },
49        ],
50    },
51    EntityLayout {
52        kind: EntityKind::Commodity,
53        label: "commodity",
54        fields: &[
55            EntityFieldLayout {
56                name: "id",
57                kind: EntityFieldKind::String,
58            },
59            EntityFieldLayout {
60                name: "symbol",
61                kind: EntityFieldKind::String,
62            },
63            EntityFieldLayout {
64                name: "name",
65                kind: EntityFieldKind::String,
66            },
67        ],
68    },
69    EntityLayout {
70        kind: EntityKind::Transaction,
71        label: "transaction",
72        fields: &[
73            EntityFieldLayout {
74                name: "id",
75                kind: EntityFieldKind::String,
76            },
77            EntityFieldLayout {
78                name: "note",
79                kind: EntityFieldKind::String,
80            },
81            EntityFieldLayout {
82                name: "post-date",
83                kind: EntityFieldKind::String,
84            },
85        ],
86    },
87    EntityLayout {
88        kind: EntityKind::Split,
89        label: "split",
90        fields: &[
91            EntityFieldLayout {
92                name: "id",
93                kind: EntityFieldKind::String,
94            },
95            EntityFieldLayout {
96                name: "account-id",
97                kind: EntityFieldKind::String,
98            },
99            EntityFieldLayout {
100                name: "commodity-id",
101                kind: EntityFieldKind::String,
102            },
103            EntityFieldLayout {
104                name: "value",
105                kind: EntityFieldKind::Ratio,
106            },
107        ],
108    },
109    EntityLayout {
110        kind: EntityKind::Tag,
111        label: "tag",
112        fields: &[
113            EntityFieldLayout {
114                name: "id",
115                kind: EntityFieldKind::String,
116            },
117            EntityFieldLayout {
118                name: "name",
119                kind: EntityFieldKind::String,
120            },
121            EntityFieldLayout {
122                name: "value",
123                kind: EntityFieldKind::String,
124            },
125        ],
126    },
127    EntityLayout {
128        kind: EntityKind::Price,
129        label: "price",
130        fields: &[
131            EntityFieldLayout {
132                name: "id",
133                kind: EntityFieldKind::String,
134            },
135            EntityFieldLayout {
136                name: "commodity-id",
137                kind: EntityFieldKind::String,
138            },
139            EntityFieldLayout {
140                name: "currency-id",
141                kind: EntityFieldKind::String,
142            },
143            EntityFieldLayout {
144                name: "value",
145                kind: EntityFieldKind::Ratio,
146            },
147            EntityFieldLayout {
148                name: "price-date",
149                kind: EntityFieldKind::String,
150            },
151        ],
152    },
153    EntityLayout {
154        kind: EntityKind::SshKey,
155        label: "sshkey",
156        fields: &[
157            EntityFieldLayout {
158                name: "id",
159                kind: EntityFieldKind::String,
160            },
161            EntityFieldLayout {
162                name: "fingerprint",
163                kind: EntityFieldKind::String,
164            },
165            EntityFieldLayout {
166                name: "name",
167                kind: EntityFieldKind::String,
168            },
169        ],
170    },
171    EntityLayout {
172        kind: EntityKind::ReportNode,
173        label: "reportnode",
174        fields: &[
175            EntityFieldLayout {
176                name: "id",
177                kind: EntityFieldKind::String,
178            },
179            EntityFieldLayout {
180                name: "label",
181                kind: EntityFieldKind::String,
182            },
183            EntityFieldLayout {
184                name: "depth",
185                kind: EntityFieldKind::I32,
186            },
187            EntityFieldLayout {
188                name: "amount",
189                kind: EntityFieldKind::Ratio,
190            },
191            EntityFieldLayout {
192                name: "children",
193                kind: EntityFieldKind::Pair,
194            },
195        ],
196    },
197];
198
199/// The decode layout for `kind`, or `None` for kinds with no field
200/// layout (e.g. `Condition`, which isn't a server entity).
201#[must_use]
202pub fn entity_layout(kind: EntityKind) -> Option<&'static EntityLayout> {
203    ENTITY_LAYOUTS.iter().find(|l| l.kind == kind)
204}