use std::collections::HashMap;
use crate::types::Decimals;
use crate::ws::types::{MarketDescriptorInfo, ServerMessage};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct TokenDecimals {
pub underlying: Decimals,
pub quote: Decimals,
}
#[derive(Debug, Clone, Default)]
pub struct MarketDecimals {
by_market: HashMap<String, TokenDecimals>,
}
impl MarketDecimals {
#[must_use]
pub fn new() -> Self {
Self::default()
}
pub fn insert(&mut self, info: &MarketDescriptorInfo) {
self.by_market.insert(
info.market.market_pda.to_base58(),
TokenDecimals {
underlying: info.underlying_decimals,
quote: info.quote_decimals,
},
);
}
pub fn observe(&mut self, message: &ServerMessage) {
if let ServerMessage::MarketDescriptors(data) = message {
for info in &data.markets {
self.insert(info);
}
}
}
#[must_use]
pub fn get(&self, market_pda: &str) -> Option<TokenDecimals> {
self.by_market.get(market_pda).copied()
}
}
#[cfg(test)]
#[path = "market_decimals_tests.rs"]
mod tests;