use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct OrderLevel {
pub price: u64,
pub size: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PoolUpdate {
pub sequence: u64,
pub slot: u64,
pub write_version: u64,
pub protocol_name: String,
pub pool_address: String,
pub token_mints: Vec<String>,
pub token_balances: Vec<u64>,
pub token_decimals: Vec<i32>,
pub best_bid: Option<OrderLevel>,
pub best_ask: Option<OrderLevel>,
#[serde(with = "serde_bytes")]
pub serialized_state: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Pool {
pub address: String,
pub protocol: String,
pub token_a_mint: String,
pub token_b_mint: String,
pub token_a_vault: String,
pub token_b_vault: String,
pub fee_rate: u32,
}
mod serde_bytes {
use serde::{Deserialize, Deserializer, Serializer};
pub fn serialize<S>(bytes: &Vec<u8>, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_bytes(bytes)
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<u8>, D::Error>
where
D: Deserializer<'de>,
{
let bytes: &[u8] = Deserialize::deserialize(deserializer)?;
Ok(bytes.to_vec())
}
}