Skip to main content

scripting_format/
generated.rs

1// Auto-generated from doc/nomisync-script-format.org
2// Do not edit manually - regenerate from the org document.
3
4#[repr(C)]
5#[derive(Debug, Clone, Copy, FromBytes, IntoBytes, Immutable, KnownLayout)]
6pub struct GlobalHeader {
7    pub magic: u32,
8    pub version: u16,
9    pub context_type: u8,
10    pub primary_entity_type: u8,
11    pub input_entity_count: u32,
12    pub entities_offset: u32,
13    pub strings_pool_offset: u32,
14    pub strings_pool_size: u32,
15    pub output_offset: u32,
16    pub output_size: u32,
17    pub primary_entity_idx: u32,
18    pub reserved: [u8; 28],
19}
20
21pub const GLOBAL_HEADER_SIZE: usize = 64;
22
23#[repr(C)]
24#[derive(Debug, Clone, Copy, FromBytes, IntoBytes, Immutable, KnownLayout)]
25pub struct EntityHeader {
26    pub entity_type: u8,
27    pub operation: u8,
28    pub flags: u8,
29    pub reserved: [u8; 1],
30    pub id: [u8; 16],
31    pub parent_idx: i32,
32    pub data_offset: u32,
33    pub data_size: u32,
34}
35
36pub const ENTITY_HEADER_SIZE: usize = 32;
37
38#[repr(C)]
39#[derive(Debug, Clone, Copy, FromBytes, IntoBytes, Immutable, KnownLayout)]
40pub struct TransactionData {
41    pub post_date: i64,
42    pub enter_date: i64,
43    pub split_count: u32,
44    pub tag_count: u32,
45    pub is_multi_currency: u8,
46    pub reserved: [u8; 23],
47}
48
49pub const TRANSACTION_DATA_SIZE: usize = 48;
50
51#[repr(C)]
52#[derive(Debug, Clone, Copy, FromBytes, IntoBytes, Immutable, KnownLayout)]
53pub struct SplitData {
54    pub account_id: [u8; 16],
55    pub commodity_id: [u8; 16],
56    pub value_num: i64,
57    pub value_denom: i64,
58    pub reconcile_state: u8,
59    pub reserved: [u8; 7],
60    pub reconcile_date: i64,
61}
62
63pub const SPLIT_DATA_SIZE: usize = 64;
64
65#[repr(C)]
66#[derive(Debug, Clone, Copy, FromBytes, IntoBytes, Immutable, KnownLayout)]
67pub struct TagData {
68    pub name_offset: u32,
69    pub value_offset: u32,
70    pub name_len: u16,
71    pub value_len: u16,
72    pub reserved: [u8; 4],
73}
74
75pub const TAG_DATA_SIZE: usize = 16;
76
77#[repr(C)]
78#[derive(Debug, Clone, Copy, FromBytes, IntoBytes, Immutable, KnownLayout)]
79pub struct AccountData {
80    pub parent_account_id: [u8; 16],
81    pub name_offset: u32,
82    pub path_offset: u32,
83    pub tag_count: u32,
84    pub name_len: u16,
85    pub path_len: u16,
86    pub reserved: [u8; 16],
87}
88
89pub const ACCOUNT_DATA_SIZE: usize = 48;
90
91#[repr(C)]
92#[derive(Debug, Clone, Copy, FromBytes, IntoBytes, Immutable, KnownLayout)]
93pub struct CommodityData {
94    pub symbol_offset: u32,
95    pub name_offset: u32,
96    pub tag_count: u32,
97    pub symbol_len: u16,
98    pub name_len: u16,
99    pub reserved: [u8; 16],
100}
101
102pub const COMMODITY_DATA_SIZE: usize = 32;
103
104#[repr(C)]
105#[derive(Debug, Clone, Copy, FromBytes, IntoBytes, Immutable, KnownLayout)]
106pub struct OutputHeader {
107    pub magic: u32,
108    pub output_entity_count: u32,
109    pub output_start_idx: u32,
110    pub strings_offset: u32,
111    pub next_write_pos: u32,
112    pub reserved: [u8; 4],
113}
114
115pub const OUTPUT_HEADER_SIZE: usize = 24;
116
117#[repr(C)]
118#[derive(Debug, Clone, Copy, FromBytes, IntoBytes, Immutable, KnownLayout)]
119pub struct DebugValueData {
120    pub value_type: u8,
121    pub reserved: [u8; 7],
122    pub data1: i64,
123    pub data2: i64,
124}
125
126pub const DEBUG_VALUE_DATA_SIZE: usize = 24;
127
128impl GlobalHeader {
129    pub fn to_bytes(&self) -> [u8; GLOBAL_HEADER_SIZE] {
130        let mut buf = [0u8; GLOBAL_HEADER_SIZE];
131        buf.copy_from_slice(<Self as IntoBytes>::as_bytes(self));
132        buf
133    }
134
135    pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
136        let v = Self::read_from_prefix(bytes).ok().map(|(v, _)| v)?;
137        (v.magic == MAGIC_NOMI).then_some(v)
138    }
139}
140
141impl EntityHeader {
142    pub fn to_bytes(&self) -> [u8; ENTITY_HEADER_SIZE] {
143        let mut buf = [0u8; ENTITY_HEADER_SIZE];
144        buf.copy_from_slice(<Self as IntoBytes>::as_bytes(self));
145        buf
146    }
147
148    pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
149        Self::read_from_prefix(bytes).ok().map(|(v, _)| v)
150    }
151}
152
153impl TransactionData {
154    pub fn to_bytes(&self) -> [u8; TRANSACTION_DATA_SIZE] {
155        let mut buf = [0u8; TRANSACTION_DATA_SIZE];
156        buf.copy_from_slice(<Self as IntoBytes>::as_bytes(self));
157        buf
158    }
159
160    pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
161        Self::read_from_prefix(bytes).ok().map(|(v, _)| v)
162    }
163}
164
165impl SplitData {
166    pub fn to_bytes(&self) -> [u8; SPLIT_DATA_SIZE] {
167        let mut buf = [0u8; SPLIT_DATA_SIZE];
168        buf.copy_from_slice(<Self as IntoBytes>::as_bytes(self));
169        buf
170    }
171
172    pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
173        Self::read_from_prefix(bytes).ok().map(|(v, _)| v)
174    }
175}
176
177impl TagData {
178    pub fn to_bytes(&self) -> [u8; TAG_DATA_SIZE] {
179        let mut buf = [0u8; TAG_DATA_SIZE];
180        buf.copy_from_slice(<Self as IntoBytes>::as_bytes(self));
181        buf
182    }
183
184    pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
185        Self::read_from_prefix(bytes).ok().map(|(v, _)| v)
186    }
187}
188
189impl AccountData {
190    pub fn to_bytes(&self) -> [u8; ACCOUNT_DATA_SIZE] {
191        let mut buf = [0u8; ACCOUNT_DATA_SIZE];
192        buf.copy_from_slice(<Self as IntoBytes>::as_bytes(self));
193        buf
194    }
195
196    pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
197        Self::read_from_prefix(bytes).ok().map(|(v, _)| v)
198    }
199}
200
201impl CommodityData {
202    pub fn to_bytes(&self) -> [u8; COMMODITY_DATA_SIZE] {
203        let mut buf = [0u8; COMMODITY_DATA_SIZE];
204        buf.copy_from_slice(<Self as IntoBytes>::as_bytes(self));
205        buf
206    }
207
208    pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
209        Self::read_from_prefix(bytes).ok().map(|(v, _)| v)
210    }
211}
212
213impl OutputHeader {
214    pub fn to_bytes(&self) -> [u8; OUTPUT_HEADER_SIZE] {
215        let mut buf = [0u8; OUTPUT_HEADER_SIZE];
216        buf.copy_from_slice(<Self as IntoBytes>::as_bytes(self));
217        buf
218    }
219
220    pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
221        let v = Self::read_from_prefix(bytes).ok().map(|(v, _)| v)?;
222        (v.magic == MAGIC_OUTP).then_some(v)
223    }
224}
225
226impl DebugValueData {
227    pub fn to_bytes(&self) -> [u8; DEBUG_VALUE_DATA_SIZE] {
228        let mut buf = [0u8; DEBUG_VALUE_DATA_SIZE];
229        buf.copy_from_slice(<Self as IntoBytes>::as_bytes(self));
230        buf
231    }
232
233    pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
234        Self::read_from_prefix(bytes).ok().map(|(v, _)| v)
235    }
236}
237