balancer_maths_rust/common/
errors.rs1use std::fmt;
4
5#[derive(Debug, Clone, PartialEq)]
7pub enum PoolError {
8 InvalidAmount,
10
11 InsufficientLiquidity,
13
14 MathOverflow,
16
17 InvalidPoolType,
19
20 InvalidTokenIndex,
22
23 InvalidSwapParameters,
25
26 InvalidLiquidityParameters,
28
29 PoolNotFound,
31
32 HookError(String),
34
35 Custom(String),
37
38 ZeroInvariant,
40
41 MaxInRatioExceeded,
43
44 MaxOutRatioExceeded,
46
47 InvalidInput(String),
49
50 InputTokenNotFound,
53
54 OutputTokenNotFound,
56
57 TradeAmountTooSmall,
59
60 BeforeSwapHookFailed,
62
63 AfterSwapHookFailed,
65
66 BeforeAddLiquidityHookFailed,
68
69 AfterAddLiquidityHookFailed,
71
72 BeforeRemoveLiquidityHookFailed,
74
75 AfterRemoveLiquidityHookFailed,
77
78 UnsupportedPoolType(String),
80
81 UnsupportedHookType(String),
83
84 NoStateForHook(String),
86
87 StableInvariantDidntConverge,
89
90 TokenAmountOutIsGreaterThanBalance,
91}
92
93impl fmt::Display for PoolError {
94 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
95 match self {
96 PoolError::InvalidAmount => write!(f, "Invalid amount provided"),
97 PoolError::InsufficientLiquidity => write!(f, "Insufficient liquidity"),
98 PoolError::MathOverflow => write!(f, "Mathematical overflow occurred"),
99 PoolError::InvalidPoolType => write!(f, "Invalid pool type"),
100 PoolError::InvalidTokenIndex => write!(f, "Invalid token index"),
101 PoolError::InvalidSwapParameters => write!(f, "Invalid swap parameters"),
102 PoolError::InvalidLiquidityParameters => write!(f, "Invalid liquidity parameters"),
103 PoolError::PoolNotFound => write!(f, "Pool not found"),
104 PoolError::HookError(msg) => write!(f, "Hook error: {}", msg),
105 PoolError::Custom(msg) => write!(f, "Custom error: {}", msg),
106 PoolError::ZeroInvariant => write!(f, "Zero invariant"),
107 PoolError::MaxInRatioExceeded => write!(f, "Maximum input ratio exceeded"),
108 PoolError::MaxOutRatioExceeded => write!(f, "Maximum output ratio exceeded"),
109 PoolError::InvalidInput(msg) => write!(f, "Invalid input: {}", msg),
110
111 PoolError::InputTokenNotFound => write!(f, "Input token not found on pool"),
113 PoolError::OutputTokenNotFound => write!(f, "Output token not found on pool"),
114 PoolError::TradeAmountTooSmall => write!(f, "TradeAmountTooSmall"),
115 PoolError::BeforeSwapHookFailed => write!(f, "BeforeSwapHookFailed"),
116 PoolError::AfterSwapHookFailed => write!(f, "AfterSwapHookFailed"),
117 PoolError::BeforeAddLiquidityHookFailed => write!(f, "BeforeAddLiquidityHookFailed"),
118 PoolError::AfterAddLiquidityHookFailed => write!(f, "AfterAddLiquidityHookFailed"),
119 PoolError::BeforeRemoveLiquidityHookFailed => {
120 write!(f, "BeforeRemoveLiquidityHookFailed")
121 }
122 PoolError::AfterRemoveLiquidityHookFailed => {
123 write!(f, "AfterRemoveLiquidityHookFailed")
124 }
125 PoolError::UnsupportedPoolType(pool_type) => {
126 write!(f, "Unsupported Pool Type: {}", pool_type)
127 }
128 PoolError::UnsupportedHookType(hook_type) => {
129 write!(f, "Unsupported Hook Type: {}", hook_type)
130 }
131 PoolError::NoStateForHook(hook_name) => write!(f, "No state for Hook: {}", hook_name),
132 PoolError::StableInvariantDidntConverge => {
133 write!(f, "Stable invariant didn't converge")
134 }
135 PoolError::TokenAmountOutIsGreaterThanBalance => {
136 write!(f, "Token amount out is greater than balance")
137 }
138 }
139 }
140}
141
142impl std::error::Error for PoolError {}
143
144impl From<String> for PoolError {
145 fn from(msg: String) -> Self {
146 PoolError::Custom(msg)
147 }
148}
149
150impl From<&str> for PoolError {
151 fn from(msg: &str) -> Self {
152 PoolError::Custom(msg.to_string())
153 }
154}