use candid::CandidType;
use num_bigint::BigUint;
use serde::{Deserialize, Serialize};
use crate::impl_from_uint_for_enum;
#[derive(
Clone, CandidType, Hash, Debug, Ord, PartialOrd, Eq, PartialEq, Deserialize, Serialize,
)]
pub enum Chain {
Dfinity = 223,
BinanceSmartChain = 714,
Bitcoin = 0,
Ethereum = 60,
EX3Layer2 = 87653426,
}
impl From<BigUint> for Chain {
fn from(chain_id: BigUint) -> Self {
match chain_id {
chain_id if chain_id == Chain::Dfinity.into() => Chain::Dfinity,
chain_id if chain_id == Chain::BinanceSmartChain.into() => Chain::BinanceSmartChain,
chain_id if chain_id == Chain::Bitcoin.into() => Chain::Bitcoin,
chain_id if chain_id == Chain::Ethereum.into() => Chain::Ethereum,
chain_id if chain_id == Chain::EX3Layer2.into() => Chain::EX3Layer2,
_ => panic!("unknown chain id"),
}
}
}
impl Into<BigUint> for Chain {
fn into(self) -> BigUint {
BigUint::from(self as u128)
}
}
impl_from_uint_for_enum!(Chain, u8, u16, u32, u64, u128);