use serde::Deserialize;
use serde::Serialize;
#[derive(Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Flag {
#[serde(rename = "abi")]
ABI,
#[serde(rename = "metadata")]
Metadata,
#[serde(rename = "devdoc")]
Devdoc,
#[serde(rename = "userdoc")]
Userdoc,
#[serde(rename = "evm.methodIdentifiers")]
MethodIdentifiers,
#[serde(rename = "storageLayout")]
StorageLayout,
#[serde(rename = "ast")]
AST,
#[serde(rename = "irOptimized")]
Yul,
#[serde(rename = "evm")]
EVM,
#[serde(rename = "evm.legacyAssembly")]
EVMLA,
#[serde(rename = "evm.bytecode")]
EVMBC,
#[serde(rename = "evm.deployedBytecode")]
EVMDBC,
#[serde(rename = "evm.assembly")]
Assembly,
#[serde(rename = "ir")]
Ir,
}
impl Flag {
pub fn all() -> &'static [Self] {
&[
Self::ABI,
Self::Metadata,
Self::Devdoc,
Self::Userdoc,
Self::MethodIdentifiers,
Self::StorageLayout,
Self::AST,
Self::Yul,
Self::EVM,
Self::EVMLA,
Self::EVMBC,
Self::EVMDBC,
Self::Assembly,
Self::Ir,
]
}
pub fn evm_children() -> &'static [Self] {
&[
Self::MethodIdentifiers,
Self::EVMBC,
Self::EVMDBC,
Self::Assembly,
]
}
pub fn codegen_requirements() -> &'static [Self] {
&[
Self::AST,
Self::MethodIdentifiers,
Self::Metadata,
Self::Yul,
]
}
pub fn is_evm_codegen(&self) -> bool {
matches!(
self,
Flag::EVMBC | Flag::EVMDBC | Flag::EVMLA | Flag::EVM | Flag::Assembly
)
}
}