revive_solc_json_interface/standard_json/input/settings/selection/file/
mod.rs

1//! The `solc --standard-json` output file selection.
2
3pub mod flag;
4
5use std::collections::HashSet;
6
7use serde::Deserialize;
8use serde::Serialize;
9
10use self::flag::Flag as SelectionFlag;
11
12/// The `solc --standard-json` output file selection.
13#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq)]
14pub struct File {
15    /// The per-file output selections.
16    #[serde(rename = "", skip_serializing_if = "Option::is_none")]
17    pub per_file: Option<HashSet<SelectionFlag>>,
18    /// The per-contract output selections.
19    #[serde(rename = "*", skip_serializing_if = "Option::is_none")]
20    pub per_contract: Option<HashSet<SelectionFlag>>,
21}
22
23impl File {
24    /// Creates the selection required by our compilation process.
25    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    /// Extends the user's output selection with flag required by our compilation process.
39    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}