pub mod libraries;
pub mod metadata;
pub mod metadata_hash;
pub mod optimizer;
pub mod polkavm;
pub mod selection;
#[cfg(feature = "resolc")]
pub mod warning;
use std::collections::BTreeSet;
use serde::Deserialize;
use serde::Serialize;
use self::libraries::Libraries;
use self::metadata::Metadata;
use self::optimizer::Optimizer;
use self::polkavm::PolkaVM;
use self::selection::Selection;
#[cfg(feature = "resolc")]
use self::warning::Warning;
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Settings {
#[serde(skip_serializing_if = "Option::is_none")]
pub evm_version: Option<revive_common::EVMVersion>,
#[serde(default, skip_serializing_if = "Libraries::is_empty")]
pub libraries: Libraries,
#[serde(default, skip_serializing_if = "BTreeSet::is_empty")]
pub remappings: BTreeSet<String>,
#[serde(default)]
pub output_selection: Selection,
#[serde(
rename = "viaIR",
skip_serializing_if = "Option::is_none",
skip_deserializing
)]
pub via_ir: Option<bool>,
pub optimizer: Optimizer,
#[serde(default)]
pub metadata: Metadata,
#[serde(default, skip_serializing)]
pub polkavm: PolkaVM,
#[cfg(feature = "resolc")]
#[serde(default, skip_serializing)]
pub suppressed_warnings: Vec<self::warning::Warning>,
#[cfg(feature = "resolc")]
#[serde(default, alias = "LLVMOptions", skip_serializing)]
pub llvm_arguments: Vec<String>,
#[serde(default, rename = "detectMissingLibraries", skip_serializing)]
pub detect_missing_libraries: bool,
}
#[cfg(feature = "resolc")]
impl Settings {
pub fn new(
evm_version: Option<revive_common::EVMVersion>,
libraries: Libraries,
remappings: BTreeSet<String>,
output_selection: Selection,
optimizer: Optimizer,
metadata: Metadata,
polkavm: PolkaVM,
suppressed_warnings: Vec<Warning>,
llvm_arguments: Vec<String>,
detect_missing_libraries: bool,
) -> Self {
Self {
evm_version,
libraries,
remappings,
output_selection,
optimizer,
metadata,
via_ir: Some(true),
polkavm,
suppressed_warnings,
llvm_arguments,
detect_missing_libraries,
}
}
pub fn extend_selection(&mut self, selection: Selection) {
self.output_selection.extend(selection);
}
pub fn selection_to_prune(&self) -> Selection {
self.output_selection.selection_to_prune()
}
pub fn retain_output_selection(&mut self) {
self.output_selection.retain();
}
}