use alloy_primitives::{Address, U256};
use cow_errors::CowError;
use cow_types::OrderKind;
use crate::provider::MaybeSendSync;
#[derive(Debug, Clone)]
pub struct SwapQuoteParams {
pub owner: Address,
pub chain_id: u64,
pub sell_token: Address,
pub sell_token_decimals: u8,
pub buy_token: Address,
pub buy_token_decimals: u8,
pub amount: U256,
pub kind: OrderKind,
pub slippage_bps: u32,
pub app_data_json: Option<String>,
}
#[derive(Debug, Clone)]
pub struct SwapQuoteOutcome {
pub sell_amount: U256,
pub buy_amount_after_slippage: U256,
pub fee_amount: U256,
pub valid_to: u32,
pub app_data_hex: String,
pub full_app_data: String,
}
pub trait SwapQuoter: MaybeSendSync {
fn quote_swap<'a>(&'a self, params: SwapQuoteParams) -> QuoteSwapFuture<'a>;
}
#[cfg(not(target_arch = "wasm32"))]
pub type QuoteSwapFuture<'a> = std::pin::Pin<
Box<dyn std::future::Future<Output = Result<SwapQuoteOutcome, CowError>> + Send + 'a>,
>;
#[cfg(target_arch = "wasm32")]
pub type QuoteSwapFuture<'a> =
std::pin::Pin<Box<dyn std::future::Future<Output = Result<SwapQuoteOutcome, CowError>> + 'a>>;