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