mint_core/layout/
settings.rs1use super::value::ValueSource;
2use serde::Deserialize;
3use std::collections::HashMap;
4
5#[derive(Debug, Deserialize)]
7#[serde(deny_unknown_fields)]
8pub struct MintConfig {
9 pub endianness: Endianness,
10 #[serde(default)]
11 pub checksum: HashMap<String, ChecksumConfig>,
12 #[serde(rename = "const", default)]
13 pub consts: HashMap<String, ValueSource>,
14}
15
16#[derive(Debug, Deserialize, Clone, Copy)]
17#[serde(rename_all = "lowercase")]
18pub enum Endianness {
19 Little,
20 Big,
21}
22
23#[derive(Debug, Deserialize, Clone)]
26#[serde(deny_unknown_fields)]
27pub struct ChecksumConfig {
28 pub polynomial: u32,
29 pub start: u32,
30 pub xor_out: u32,
31 pub ref_in: bool,
32 pub ref_out: bool,
33}
34
35pub trait EndianBytes {
36 fn to_endian_bytes(self, endianness: &Endianness) -> Vec<u8>;
37}
38
39macro_rules! impl_endian_bytes {
40 ($($t:ty),* $(,)?) => {$(
41 impl EndianBytes for $t {
42 fn to_endian_bytes(self, e: &Endianness) -> Vec<u8> {
43 match e {
44 Endianness::Little => self.to_le_bytes().to_vec(),
45 Endianness::Big => self.to_be_bytes().to_vec(),
46 }
47 }
48 }
49 )*};
50}
51impl_endian_bytes!(u8, u16, u32, u64, i8, i16, i32, i64, f32, f64);