revive_solc_json_interface/standard_json/input/settings/selection/file/
mod.rs1pub mod flag;
4
5use std::collections::HashSet;
6
7use serde::Deserialize;
8use serde::Serialize;
9
10use self::flag::Flag as SelectionFlag;
11
12#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq)]
14pub struct File {
15 #[serde(rename = "", skip_serializing_if = "Option::is_none")]
17 pub per_file: Option<HashSet<SelectionFlag>>,
18 #[serde(rename = "*", skip_serializing_if = "Option::is_none")]
20 pub per_contract: Option<HashSet<SelectionFlag>>,
21}
22
23impl File {
24 pub fn new_required() -> Self {
26 Self {
27 per_file: Some(HashSet::from_iter([SelectionFlag::AST])),
28 per_contract: Some(HashSet::from_iter([
29 SelectionFlag::EVMBC,
30 SelectionFlag::EVMDBC,
31 SelectionFlag::MethodIdentifiers,
32 SelectionFlag::Metadata,
33 SelectionFlag::Yul,
34 ])),
35 }
36 }
37
38 pub fn extend_with_required(&mut self) -> &mut Self {
40 let required = Self::new_required();
41
42 self.per_file
43 .get_or_insert_with(HashSet::default)
44 .extend(required.per_file.unwrap_or_default());
45 self.per_contract
46 .get_or_insert_with(HashSet::default)
47 .extend(required.per_contract.unwrap_or_default());
48
49 self
50 }
51}