#[derive(Debug, thiserror::Error)]
pub enum PriceSourceError {
#[error("Failed to decode event")]
DecodeError(#[source] alloy_sol_types::Error),
#[error("Swap event has empty token arrays")]
EmptyTokenArrays,
#[error("Token and amount array lengths don't match: tokens_in={tokens_in}, amounts_in={amounts_in}, tokens_out={tokens_out}, amounts_out={amounts_out}")]
ArrayLengthMismatch {
tokens_in: usize,
amounts_in: usize,
tokens_out: usize,
amounts_out: usize,
},
#[error("Invalid swap data: {details}")]
InvalidSwapData {
details: String,
},
}
impl PriceSourceError {
pub fn empty_token_arrays() -> Self {
PriceSourceError::EmptyTokenArrays
}
pub fn array_length_mismatch(
tokens_in: usize,
amounts_in: usize,
tokens_out: usize,
amounts_out: usize,
) -> Self {
PriceSourceError::ArrayLengthMismatch {
tokens_in,
amounts_in,
tokens_out,
amounts_out,
}
}
pub fn invalid_swap_data(details: impl Into<String>) -> Self {
PriceSourceError::InvalidSwapData {
details: details.into(),
}
}
}
impl From<alloy_sol_types::Error> for PriceSourceError {
fn from(error: alloy_sol_types::Error) -> Self {
PriceSourceError::DecodeError(error)
}
}