1use alloy_primitives::{Address, U256};
2
3use serde::{Deserialize, Serialize};
4use utoipa::openapi::schema::SchemaType;
5use utoipa::openapi::{Array, Object, ToArray, Type};
6use utoipa::PartialSchema;
7use utoipa::{schema, ToSchema};
8
9#[derive(Debug, Serialize, ToSchema)]
10pub struct PoolResponse {
11 pub pools: Vec<Pool>,
12 pub total: usize,
13}
14
15#[derive(Debug, Serialize, ToSchema)]
16pub struct PoolDetailsResponse {
17 #[schema(schema_with = String::schema)]
18 pub address: Address,
19 pub protocol: PoolProtocol,
20 pub pool_class: PoolClass,
21 #[schema(schema_with = String::schema)]
22 pub fee: U256,
23 #[schema(schema_with = array_of_strings)]
24 pub tokens: Vec<Address>,
25}
26
27#[derive(Debug, Serialize, ToSchema)]
28pub struct Pool {
29 #[schema(schema_with = String::schema)]
30 pub address: Address,
31 #[schema(schema_with = String::schema)]
32 pub fee: U256,
33 #[schema(schema_with = array_of_strings)]
34 pub tokens: Vec<Address>,
35 pub protocol: PoolProtocol,
36 pub pool_class: PoolClass,
37}
38
39pub fn array_of_strings() -> Array {
40 Object::with_type(SchemaType::Type(Type::String)).to_array()
41}
42
43#[derive(Debug, Serialize, ToSchema)]
44#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
45pub enum PoolClass {
46 Unknown,
47 UniswapV2,
48 UniswapV3,
49 UniswapV4,
50 PancakeV3,
51 Maverick,
52 MaverickV2,
53 Curve,
54 LidoStEth,
55 LidoWstEth,
56 RocketPool,
57 BalancerV1,
58 BalancerV2,
59 Custom(u64),
60}
61impl From<kabu_types_entities::PoolClass> for PoolClass {
62 fn from(pool_class: kabu_types_entities::PoolClass) -> Self {
63 match pool_class {
64 kabu_types_entities::PoolClass::Unknown => PoolClass::Unknown,
65 kabu_types_entities::PoolClass::UniswapV2 => PoolClass::UniswapV2,
66 kabu_types_entities::PoolClass::UniswapV3 => PoolClass::UniswapV3,
67 kabu_types_entities::PoolClass::UniswapV4 => PoolClass::UniswapV4,
68 kabu_types_entities::PoolClass::PancakeV3 => PoolClass::PancakeV3,
69 kabu_types_entities::PoolClass::Maverick => PoolClass::Maverick,
70 kabu_types_entities::PoolClass::MaverickV2 => PoolClass::MaverickV2,
71 kabu_types_entities::PoolClass::Curve => PoolClass::Curve,
72 kabu_types_entities::PoolClass::LidoStEth => PoolClass::LidoStEth,
73 kabu_types_entities::PoolClass::LidoWstEth => PoolClass::LidoWstEth,
74 kabu_types_entities::PoolClass::RocketPool => PoolClass::RocketPool,
75 kabu_types_entities::PoolClass::BalancerV1 => PoolClass::BalancerV1,
76 kabu_types_entities::PoolClass::BalancerV2 => PoolClass::BalancerV2,
77 kabu_types_entities::PoolClass::Custom(id) => PoolClass::Custom(id),
78 }
79 }
80}
81
82#[derive(Debug, Deserialize, Serialize, ToSchema)]
83#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
84pub enum PoolProtocol {
85 Unknown,
86 AaveV2,
87 AaveV3,
88 UniswapV2,
89 UniswapV2Like,
90 NomiswapStable,
91 Sushiswap,
92 SushiswapV3,
93 DooarSwap,
94 Safeswap,
95 Miniswap,
96 Shibaswap,
97 UniswapV3,
98 UniswapV3Like,
99 UniswapV4,
100 PancakeV3,
101 Integral,
102 Maverick,
103 MaverickV2,
104 Curve,
105 LidoStEth,
106 LidoWstEth,
107 RocketEth,
108 OgPepe,
109 AntFarm,
110 BalancerV1,
111 BalancerV2,
112 Custom(u64),
113}
114
115impl From<kabu_types_entities::PoolProtocol> for PoolProtocol {
116 fn from(protocol: kabu_types_entities::PoolProtocol) -> Self {
117 match protocol {
118 kabu_types_entities::PoolProtocol::AaveV2 => PoolProtocol::AaveV2,
119 kabu_types_entities::PoolProtocol::AaveV3 => PoolProtocol::AaveV3,
120 kabu_types_entities::PoolProtocol::Unknown => PoolProtocol::Unknown,
121 kabu_types_entities::PoolProtocol::UniswapV2 => PoolProtocol::UniswapV2,
122 kabu_types_entities::PoolProtocol::UniswapV2Like => PoolProtocol::UniswapV2Like,
123 kabu_types_entities::PoolProtocol::NomiswapStable => PoolProtocol::NomiswapStable,
124 kabu_types_entities::PoolProtocol::Sushiswap => PoolProtocol::Sushiswap,
125 kabu_types_entities::PoolProtocol::SushiswapV3 => PoolProtocol::SushiswapV3,
126 kabu_types_entities::PoolProtocol::DooarSwap => PoolProtocol::DooarSwap,
127 kabu_types_entities::PoolProtocol::Safeswap => PoolProtocol::Safeswap,
128 kabu_types_entities::PoolProtocol::Miniswap => PoolProtocol::Miniswap,
129 kabu_types_entities::PoolProtocol::Shibaswap => PoolProtocol::Shibaswap,
130 kabu_types_entities::PoolProtocol::UniswapV3 => PoolProtocol::UniswapV3,
131 kabu_types_entities::PoolProtocol::UniswapV3Like => PoolProtocol::UniswapV3Like,
132 kabu_types_entities::PoolProtocol::UniswapV4 => PoolProtocol::UniswapV4,
133 kabu_types_entities::PoolProtocol::PancakeV3 => PoolProtocol::PancakeV3,
134 kabu_types_entities::PoolProtocol::Integral => PoolProtocol::Integral,
135 kabu_types_entities::PoolProtocol::Maverick => PoolProtocol::Maverick,
136 kabu_types_entities::PoolProtocol::MaverickV2 => PoolProtocol::MaverickV2,
137 kabu_types_entities::PoolProtocol::Curve => PoolProtocol::Curve,
138 kabu_types_entities::PoolProtocol::LidoStEth => PoolProtocol::LidoStEth,
139 kabu_types_entities::PoolProtocol::LidoWstEth => PoolProtocol::LidoWstEth,
140 kabu_types_entities::PoolProtocol::RocketEth => PoolProtocol::RocketEth,
141 kabu_types_entities::PoolProtocol::OgPepe => PoolProtocol::OgPepe,
142 kabu_types_entities::PoolProtocol::AntFarm => PoolProtocol::AntFarm,
143 kabu_types_entities::PoolProtocol::BalancerV1 => PoolProtocol::BalancerV1,
144 kabu_types_entities::PoolProtocol::BalancerV2 => PoolProtocol::BalancerV2,
145 kabu_types_entities::PoolProtocol::Custom(id) => PoolProtocol::Custom(id),
146 }
147 }
148}
149
150impl From<&PoolProtocol> for kabu_types_entities::PoolProtocol {
151 fn from(protocol: &PoolProtocol) -> Self {
152 match protocol {
153 PoolProtocol::Unknown => kabu_types_entities::PoolProtocol::Unknown,
154 PoolProtocol::AaveV2 => kabu_types_entities::PoolProtocol::AaveV2,
155 PoolProtocol::AaveV3 => kabu_types_entities::PoolProtocol::AaveV3,
156 PoolProtocol::UniswapV2 => kabu_types_entities::PoolProtocol::UniswapV2,
157 PoolProtocol::UniswapV2Like => kabu_types_entities::PoolProtocol::UniswapV2Like,
158 PoolProtocol::NomiswapStable => kabu_types_entities::PoolProtocol::NomiswapStable,
159 PoolProtocol::Sushiswap => kabu_types_entities::PoolProtocol::Sushiswap,
160 PoolProtocol::SushiswapV3 => kabu_types_entities::PoolProtocol::SushiswapV3,
161 PoolProtocol::DooarSwap => kabu_types_entities::PoolProtocol::DooarSwap,
162 PoolProtocol::Safeswap => kabu_types_entities::PoolProtocol::Safeswap,
163 PoolProtocol::Miniswap => kabu_types_entities::PoolProtocol::Miniswap,
164 PoolProtocol::Shibaswap => kabu_types_entities::PoolProtocol::Shibaswap,
165 PoolProtocol::UniswapV3 => kabu_types_entities::PoolProtocol::UniswapV3,
166 PoolProtocol::UniswapV3Like => kabu_types_entities::PoolProtocol::UniswapV3Like,
167 PoolProtocol::UniswapV4 => kabu_types_entities::PoolProtocol::UniswapV4,
168 PoolProtocol::PancakeV3 => kabu_types_entities::PoolProtocol::PancakeV3,
169 PoolProtocol::Integral => kabu_types_entities::PoolProtocol::Integral,
170 PoolProtocol::Maverick => kabu_types_entities::PoolProtocol::Maverick,
171 PoolProtocol::MaverickV2 => kabu_types_entities::PoolProtocol::MaverickV2,
172 PoolProtocol::Curve => kabu_types_entities::PoolProtocol::Curve,
173 PoolProtocol::LidoStEth => kabu_types_entities::PoolProtocol::LidoStEth,
174 PoolProtocol::LidoWstEth => kabu_types_entities::PoolProtocol::LidoWstEth,
175 PoolProtocol::RocketEth => kabu_types_entities::PoolProtocol::RocketEth,
176 PoolProtocol::OgPepe => kabu_types_entities::PoolProtocol::OgPepe,
177 PoolProtocol::AntFarm => kabu_types_entities::PoolProtocol::AntFarm,
178 PoolProtocol::BalancerV1 => kabu_types_entities::PoolProtocol::BalancerV1,
179 PoolProtocol::BalancerV2 => kabu_types_entities::PoolProtocol::BalancerV2,
180 PoolProtocol::Custom(id) => kabu_types_entities::PoolProtocol::Custom(*id),
181 }
182 }
183}
184
185#[derive(Debug, Serialize, ToSchema)]
186pub struct MarketStats {
187 pub total_pools: usize,
188}