1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
5pub struct Gas {
6 pub da_gas: u64,
8 pub l2_gas: u64,
10}
11
12#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
14pub struct GasFees {
15 pub fee_per_da_gas: u128,
17 pub fee_per_l2_gas: u128,
19}
20
21#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
23pub struct GasSettings {
24 pub gas_limits: Option<Gas>,
26 pub teardown_gas_limits: Option<Gas>,
28 pub max_fee_per_gas: Option<GasFees>,
30 pub max_priority_fee_per_gas: Option<GasFees>,
32}
33
34#[cfg(test)]
35#[allow(clippy::panic)]
36mod tests {
37 use super::*;
38
39 #[test]
40 fn gas_settings_default_is_empty() {
41 let settings = GasSettings::default();
42 assert_eq!(settings.gas_limits, None);
43 assert_eq!(settings.teardown_gas_limits, None);
44 assert_eq!(settings.max_fee_per_gas, None);
45 assert_eq!(settings.max_priority_fee_per_gas, None);
46 }
47
48 #[test]
49 fn gas_settings_roundtrip() {
50 let settings = GasSettings {
51 gas_limits: Some(Gas {
52 da_gas: 1,
53 l2_gas: 2,
54 }),
55 teardown_gas_limits: Some(Gas {
56 da_gas: 3,
57 l2_gas: 4,
58 }),
59 max_fee_per_gas: Some(GasFees {
60 fee_per_da_gas: 5,
61 fee_per_l2_gas: 6,
62 }),
63 max_priority_fee_per_gas: None,
64 };
65
66 let json = match serde_json::to_string(&settings) {
67 Ok(json) => json,
68 Err(err) => panic!("serializing GasSettings should succeed: {err}"),
69 };
70 let decoded: GasSettings = match serde_json::from_str(&json) {
71 Ok(decoded) => decoded,
72 Err(err) => panic!("deserializing GasSettings should succeed: {err}"),
73 };
74 assert_eq!(decoded, settings);
75 }
76}