1use super::{deserializer::deserialize_str_as_u64, SpecName};
2use serde::Deserialize;
3use std::collections::HashMap;
4
5#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
6#[serde(rename_all = "camelCase", deny_unknown_fields)]
7pub struct BlobConfig {
8 #[serde(deserialize_with = "deserialize_str_as_u64")]
9 pub target: u64,
10 #[serde(deserialize_with = "deserialize_str_as_u64")]
11 pub max: u64,
12 #[serde(deserialize_with = "deserialize_str_as_u64")]
13 pub base_fee_update_fraction: u64,
14}
15
16#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
17#[serde(rename_all = "camelCase", deny_unknown_fields)]
18pub struct Config {
19 pub blob_schedule: Option<HashMap<SpecName, BlobConfig>>,
20 #[serde(deserialize_with = "deserialize_str_as_u64")]
21 pub chainid: u64,
22 pub network: Option<SpecName>,
23}
24
25#[cfg(test)]
26mod tests {
27 use super::*;
28
29 #[test]
30 fn deserialize() {
31 let json = r#"
32 {
33 "blobSchedule": {
34 "Cancun": {
35 "target": "0x03",
36 "max": "0x06",
37 "baseFeeUpdateFraction": "0x32f0ed"
38 }
39 },
40 "chainid": "0x01"
41 }
42 "#;
43
44 let config: Config = serde_json::from_str(json).unwrap();
45 assert_eq!(config.chainid, 1);
46 assert!(config.blob_schedule.is_some());
47
48 let json = r#"
49 {
50 "chainid": "0x01"
51 }
52 "#;
53
54 let config: Config = serde_json::from_str(json).unwrap();
55 assert!(!config.blob_schedule.is_some());
56 }
57}