use astroport::{asset::MINIMUM_LIQUIDITY_AMOUNT, pair::MAX_FEE_SHARE_BPS}; use cosmwasm_std::{OverflowError, StdError, Uint128}; use cw_utils::{ParseReplyError, PaymentError}; use thiserror::Error; /// This enum describes pair contract errors #[derive(Error, Debug, PartialEq)] pub enum ContractError { #[error("{0}")] Std(#[from] StdError), #[error("{0}")] PaymentError(#[from] PaymentError), #[error("{0}")] ParseReplyError(#[from] ParseReplyError), #[error("Unauthorized")] Unauthorized {}, #[error("CW20 tokens can be swapped via Cw20::Send message only")] Cw20DirectSwap {}, #[error("Operation non supported")] NonSupported {}, #[error("Event of zero transfer")] InvalidZeroAmount {}, #[error("Operation exceeds max spread limit")] MaxSpreadAssertion {}, #[error("Provided spread amount exceeds allowed limit")] AllowedSpreadAssertion {}, #[error("Operation exceeds max splippage tolerance")] MaxSlippageAssertion {}, #[error("Slippage is more than expected: received {0}, expected {1} LP tokens")] ProvideSlippageViolation(Uint128, Uint128), #[error("Received {received} {asset_name} but expected {expected}")] WithdrawSlippageViolation { asset_name: String, received: Uint128, expected: Uint128, }, #[error("Wrong asset length: expected {expected}, actual {actual}")] WrongAssetLength { expected: usize, actual: usize }, #[error("Doubling assets in asset infos")] DoublingAssets {}, #[error("Asset mismatch between the requested and the stored asset in contract")] AssetMismatch {}, #[error("Pair type mismatch. Check factory pair configs")] PairTypeMismatch {}, #[error("Incentives address is not set in factory. Cannot auto-stake")] AutoStakeError {}, #[error("Initial liquidity must be more than {}", MINIMUM_LIQUIDITY_AMOUNT)] MinimumLiquidityAmountError {}, #[error("Failed to migrate the contract")] MigrationError {}, #[error("Failed to parse or process reply message")] FailedToParseReply {}, #[error( "Fee share is 0 or exceeds maximum allowed value of {} bps", MAX_FEE_SHARE_BPS )] FeeShareOutOfBounds {}, } impl From for ContractError { fn from(o: OverflowError) -> Self { StdError::from(o).into() } }