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

            
9
use crate::ast::EntityKind;
10

            
11
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12
pub enum EntityFieldKind {
13
    String,
14
    Ratio,
15
    I32,
16
    Pair,
17
}
18

            
19
#[derive(Debug, Clone, Copy)]
20
pub struct EntityFieldLayout {
21
    pub name: &'static str,
22
    pub kind: EntityFieldKind,
23
}
24

            
25
#[derive(Debug, Clone, Copy)]
26
pub struct EntityLayout {
27
    pub kind: EntityKind,
28
    pub label: &'static str,
29
    pub fields: &'static [EntityFieldLayout],
30
}
31

            
32
pub 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
            EntityFieldLayout {
50
                name: "type",
51
                kind: EntityFieldKind::String,
52
            },
53
        ],
54
    },
55
    EntityLayout {
56
        kind: EntityKind::Commodity,
57
        label: "commodity",
58
        fields: &[
59
            EntityFieldLayout {
60
                name: "id",
61
                kind: EntityFieldKind::String,
62
            },
63
            EntityFieldLayout {
64
                name: "symbol",
65
                kind: EntityFieldKind::String,
66
            },
67
            EntityFieldLayout {
68
                name: "name",
69
                kind: EntityFieldKind::String,
70
            },
71
        ],
72
    },
73
    EntityLayout {
74
        kind: EntityKind::Transaction,
75
        label: "transaction",
76
        fields: &[
77
            EntityFieldLayout {
78
                name: "id",
79
                kind: EntityFieldKind::String,
80
            },
81
            EntityFieldLayout {
82
                name: "note",
83
                kind: EntityFieldKind::String,
84
            },
85
            EntityFieldLayout {
86
                name: "amount",
87
                kind: EntityFieldKind::String,
88
            },
89
            EntityFieldLayout {
90
                name: "post-date",
91
                kind: EntityFieldKind::String,
92
            },
93
        ],
94
    },
95
    EntityLayout {
96
        kind: EntityKind::Split,
97
        label: "split",
98
        fields: &[
99
            EntityFieldLayout {
100
                name: "id",
101
                kind: EntityFieldKind::String,
102
            },
103
            EntityFieldLayout {
104
                name: "account-id",
105
                kind: EntityFieldKind::String,
106
            },
107
            EntityFieldLayout {
108
                name: "commodity-id",
109
                kind: EntityFieldKind::String,
110
            },
111
            EntityFieldLayout {
112
                name: "value",
113
                kind: EntityFieldKind::Ratio,
114
            },
115
        ],
116
    },
117
    EntityLayout {
118
        kind: EntityKind::Tag,
119
        label: "tag",
120
        fields: &[
121
            EntityFieldLayout {
122
                name: "id",
123
                kind: EntityFieldKind::String,
124
            },
125
            EntityFieldLayout {
126
                name: "name",
127
                kind: EntityFieldKind::String,
128
            },
129
            EntityFieldLayout {
130
                name: "value",
131
                kind: EntityFieldKind::String,
132
            },
133
        ],
134
    },
135
    EntityLayout {
136
        kind: EntityKind::Price,
137
        label: "price",
138
        fields: &[
139
            EntityFieldLayout {
140
                name: "id",
141
                kind: EntityFieldKind::String,
142
            },
143
            EntityFieldLayout {
144
                name: "commodity-id",
145
                kind: EntityFieldKind::String,
146
            },
147
            EntityFieldLayout {
148
                name: "currency-id",
149
                kind: EntityFieldKind::String,
150
            },
151
            EntityFieldLayout {
152
                name: "value",
153
                kind: EntityFieldKind::Ratio,
154
            },
155
            EntityFieldLayout {
156
                name: "price-date",
157
                kind: EntityFieldKind::String,
158
            },
159
        ],
160
    },
161
    EntityLayout {
162
        kind: EntityKind::SshKey,
163
        label: "sshkey",
164
        fields: &[
165
            EntityFieldLayout {
166
                name: "id",
167
                kind: EntityFieldKind::String,
168
            },
169
            EntityFieldLayout {
170
                name: "fingerprint",
171
                kind: EntityFieldKind::String,
172
            },
173
            EntityFieldLayout {
174
                name: "name",
175
                kind: EntityFieldKind::String,
176
            },
177
            EntityFieldLayout {
178
                name: "key-type",
179
                kind: EntityFieldKind::String,
180
            },
181
            EntityFieldLayout {
182
                name: "created-at",
183
                kind: EntityFieldKind::String,
184
            },
185
            EntityFieldLayout {
186
                name: "last-used-at",
187
                kind: EntityFieldKind::String,
188
            },
189
        ],
190
    },
191
];
192

            
193
/// The decode layout for `kind`, or `None` for kinds with no field
194
/// layout (e.g. `Condition`, which isn't a server entity).
195
#[must_use]
196
1349
pub fn entity_layout(kind: EntityKind) -> Option<&'static EntityLayout> {
197
2272
    ENTITY_LAYOUTS.iter().find(|l| l.kind == kind)
198
1349
}