use std::fmt::{self, Debug, Display};
use alloy::primitives::U256;
use crate::{Result, asset::identity::AssetIdentifier, network::Network, quoter::RateDirection};
#[cfg_attr(target_arch = "wasm32", async_trait::async_trait(?Send))]
#[cfg_attr(not(target_arch = "wasm32"), async_trait::async_trait)]
pub trait Quoter: Send + Sync + Debug {
fn identity(&self) -> String;
fn tokens(&self) -> (AssetIdentifier, AssetIdentifier);
async fn rate(
&self,
amount_in: U256,
direction: RateDirection,
network: &Network,
) -> Result<U256>;
}
impl Display for dyn Quoter {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.identity())
}
}