revive_solc_json_interface/standard_json/input/settings/optimizer/
details.rs

1//! The `solc --standard-json` input settings optimizer details.
2
3use serde::Deserialize;
4use serde::Serialize;
5
6use crate::standard_json::input::settings::optimizer::yul_details::YulDetails;
7
8/// The `solc --standard-json` input settings optimizer details.
9#[derive(Clone, Debug, Default, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct Details {
12    /// Whether the pass is enabled.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub peephole: Option<bool>,
15    /// Whether the pass is enabled.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub inliner: Option<bool>,
18    /// Whether the pass is enabled.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub jumpdest_remover: Option<bool>,
21    /// Whether the pass is enabled.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub order_literals: Option<bool>,
24    /// Whether the pass is enabled.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub deduplicate: Option<bool>,
27    /// Whether the pass is enabled.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub cse: Option<bool>,
30    /// Whether the pass is enabled.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub constant_optimizer: Option<bool>,
33    /// Whether the YUL optimizer is enabled.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub yul: Option<bool>,
36    /// The YUL optimizer configuration.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub yul_details: Option<YulDetails>,
39}
40
41impl Details {
42    /// A shortcut constructor.
43    pub fn new(
44        peephole: Option<bool>,
45        inliner: Option<bool>,
46        jumpdest_remover: Option<bool>,
47        order_literals: Option<bool>,
48        deduplicate: Option<bool>,
49        cse: Option<bool>,
50        constant_optimizer: Option<bool>,
51        yul: Option<bool>,
52        yul_details: Option<YulDetails>,
53    ) -> Self {
54        Self {
55            peephole,
56            inliner,
57            jumpdest_remover,
58            order_literals,
59            deduplicate,
60            cse,
61            constant_optimizer,
62            yul,
63            yul_details,
64        }
65    }
66
67    pub fn disabled(version: &semver::Version) -> Self {
68        let inliner = if version >= &semver::Version::new(0, 8, 5) {
69            Some(false)
70        } else {
71            None
72        };
73
74        Self::new(
75            Some(false),
76            inliner,
77            Some(false),
78            Some(false),
79            Some(false),
80            Some(false),
81            Some(false),
82            None,
83            None,
84        )
85    }
86}