1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
7pub struct OrderLevel {
8 pub price: u64,
10 pub size: u64,
12}
13
14#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
16pub struct PoolUpdate {
17 pub sequence: u64,
19 pub slot: u64,
21 pub write_version: u64,
23 pub protocol_name: String,
25 pub pool_address: String,
27 pub token_mints: Vec<String>,
29 pub token_balances: Vec<u64>,
31 pub token_decimals: Vec<i32>,
33 pub best_bid: Option<OrderLevel>,
35 pub best_ask: Option<OrderLevel>,
37 #[serde(with = "serde_bytes")]
39 pub serialized_state: Vec<u8>,
40}
41
42#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
44pub struct Pool {
45 pub address: String,
47 pub protocol: String,
49 pub token_a_mint: String,
51 pub token_b_mint: String,
53 pub token_a_vault: String,
55 pub token_b_vault: String,
57 pub fee_rate: u32,
59}
60
61mod serde_bytes {
62 use serde::{Deserialize, Deserializer, Serializer};
63
64 pub fn serialize<S>(bytes: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
65 where
66 S: Serializer,
67 {
68 serializer.serialize_bytes(bytes)
69 }
70
71 pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
72 where
73 D: Deserializer<'de>,
74 {
75 let bytes: &[u8] = Deserialize::deserialize(deserializer)?;
76 Ok(bytes.to_vec())
77 }
78}