revive_solc_json_interface/standard_json/input/settings/optimizer/
details.rs1use serde::Deserialize;
4use serde::Serialize;
5
6use crate::standard_json::input::settings::optimizer::yul_details::YulDetails;
7
8#[derive(Clone, Debug, Default, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct Details {
12 #[serde(skip_serializing_if = "Option::is_none")]
14 pub peephole: Option<bool>,
15 #[serde(skip_serializing_if = "Option::is_none")]
17 pub inliner: Option<bool>,
18 #[serde(skip_serializing_if = "Option::is_none")]
20 pub jumpdest_remover: Option<bool>,
21 #[serde(skip_serializing_if = "Option::is_none")]
23 pub order_literals: Option<bool>,
24 #[serde(skip_serializing_if = "Option::is_none")]
26 pub deduplicate: Option<bool>,
27 #[serde(skip_serializing_if = "Option::is_none")]
29 pub cse: Option<bool>,
30 #[serde(skip_serializing_if = "Option::is_none")]
32 pub constant_optimizer: Option<bool>,
33 #[serde(skip_serializing_if = "Option::is_none")]
35 pub yul: Option<bool>,
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub yul_details: Option<YulDetails>,
39}
40
41impl Details {
42 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}