use super::super::websocket::Books;
use serde::{de, Deserialize, Deserializer};
use std::str::FromStr;
fn deserialize_books<'de, D>(deserializer: D) -> Result<Books, D::Error>
where
D: Deserializer<'de>,
{
let book = <&str>::deserialize(deserializer)?;
Books::from_str(book).map_err(de::Error::custom)
}
#[derive(Debug, Clone, PartialEq, serde_derive::Deserialize)]
pub struct Trades {
#[serde(rename = "type")]
pub type_field: String,
#[serde(deserialize_with = "deserialize_books")]
pub book: Books,
pub payload: Vec<TradesPayload>,
}
#[derive(Default, Debug, Clone, PartialEq, serde_derive::Deserialize)]
pub struct TradesPayload {
pub i: i64,
pub a: String,
pub r: String,
pub v: String,
}
#[derive(Default, Debug, Clone, PartialEq, serde_derive::Serialize, serde_derive::Deserialize)]
pub struct DiffOrders {
#[serde(rename = "type")]
pub type_field: String,
pub book: String,
pub payload: Vec<DiffOrdersPayload>,
pub sequence: i64,
}
#[derive(Default, Debug, Clone, PartialEq, serde_derive::Serialize, serde_derive::Deserialize)]
pub struct DiffOrdersPayload {
pub d: u64,
pub r: String,
pub t: u8,
pub o: String,
pub s: String,
}
#[derive(Default, Debug, Clone, PartialEq, serde_derive::Deserialize)]
pub struct Orders {
#[serde(rename = "type")]
pub type_field: String,
pub book: String,
pub payload: OrdersPayload,
}
#[derive(Default, Debug, Clone, PartialEq, serde_derive::Deserialize)]
pub struct OrdersPayload {
pub bids: Vec<BidAsk>,
pub asks: Vec<BidAsk>,
}
#[derive(Default, Debug, Clone, PartialEq, serde_derive::Deserialize)]
pub struct BidAsk {
pub r: f64,
pub a: f64,
pub v: f64,
pub t: u8,
pub d: u64,
}