pub mod instant;
pub mod time;
use alloy::providers::Provider;
pub use instant::NetworkInstant;
pub use time::NetworkTime;
use crate::{EthPricesError, provider::RpcProvider};
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum Network {
EVM(NetworkId),
Fiat,
}
impl Network {
pub async fn from_provider(provider: &RpcProvider) -> Result<Self, EthPricesError> {
NetworkId::from_provider(provider).await.map(Network::EVM)
}
}
impl From<NetworkId> for Network {
fn from(network_id: NetworkId) -> Self {
Network::EVM(network_id)
}
}
impl From<&Network> for NetworkId {
fn from(network: &Network) -> Self {
match network {
Network::EVM(network_id) => network_id.clone(),
Network::Fiat => NetworkId(0),
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct NetworkId(pub u64);
impl NetworkId {
pub async fn from_provider(provider: &RpcProvider) -> Result<Self, EthPricesError> {
provider
.get_chain_id()
.await
.map(NetworkId)
.map_err(EthPricesError::from)
}
}
impl From<&NetworkId> for Network {
fn from(network_id: &NetworkId) -> Self {
Network::EVM(network_id.clone())
}
}
impl From<u64> for NetworkId {
fn from(network_id: u64) -> Self {
NetworkId(network_id)
}
}