kabu_rpc_handler/dto/
pool.rs

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}