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

1//! The `solc --standard-json` input settings optimizer.
2
3pub mod details;
4
5use serde::Deserialize;
6use serde::Serialize;
7
8use self::details::Details;
9
10/// The `solc --standard-json` input settings optimizer.
11#[derive(Clone, Debug, Serialize, Deserialize)]
12#[serde(rename_all = "camelCase")]
13pub struct Optimizer {
14    /// Whether the optimizer is enabled.
15    pub enabled: bool,
16    /// The optimization mode string.
17    #[serde(skip_serializing)]
18    pub mode: Option<char>,
19    /// The `solc` optimizer details.
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub details: Option<Details>,
22    /// Whether to try to recompile with -Oz if the bytecode is too large.
23    #[serde(skip_serializing)]
24    pub fallback_to_optimizing_for_size: Option<bool>,
25}
26
27impl Optimizer {
28    /// A shortcut constructor.
29    pub fn new(
30        enabled: bool,
31        mode: Option<char>,
32        version: &semver::Version,
33        fallback_to_optimizing_for_size: bool,
34    ) -> Self {
35        Self {
36            enabled,
37            mode,
38            details: Some(Details::disabled(version)),
39            fallback_to_optimizing_for_size: Some(fallback_to_optimizing_for_size),
40        }
41    }
42
43    /// Sets the necessary defaults.
44    pub fn normalize(&mut self, version: &semver::Version) {
45        self.details = if version >= &semver::Version::new(0, 5, 5) {
46            Some(Details::disabled(version))
47        } else {
48            None
49        };
50    }
51}