use starknet_api::transaction::TransactionVersion;
use strum::EnumIter;
#[derive(Clone, Default, Hash, PartialEq, EnumIter, Eq, Copy, Debug)]
pub enum RunnableCairo1 {
#[default]
Casm,
#[cfg(feature = "cairo_native")]
Native,
}
impl RunnableCairo1 {
pub fn is_cairo_native(&self) -> bool {
match self {
Self::Casm => false,
#[cfg(feature = "cairo_native")]
Self::Native => true,
}
}
}
#[derive(Clone, Default, Hash, PartialEq, Eq, Copy, Debug)]
pub enum CairoVersion {
#[default]
Cairo0,
Cairo1(RunnableCairo1),
}
impl CairoVersion {
pub fn from_declare_tx_version(tx_version: TransactionVersion) -> Self {
if tx_version == TransactionVersion::ZERO || tx_version == TransactionVersion::ONE {
CairoVersion::Cairo0
} else if tx_version == TransactionVersion::TWO || tx_version == TransactionVersion::THREE {
CairoVersion::Cairo1(RunnableCairo1::Casm)
} else {
panic!("Transaction version {tx_version:?} is not supported.")
}
}
pub fn is_cairo0(&self) -> bool {
match self {
Self::Cairo0 => true,
Self::Cairo1(_) => false,
}
}
pub fn is_cairo_native(&self) -> bool {
match self {
Self::Cairo0 => false,
Self::Cairo1(runnable_cairo1) => runnable_cairo1.is_cairo_native(),
}
}
}