use serde::Deserialize;
use crate::markets::side::Side;
use crate::utils::address::Address;
use crate::utils::dec::Dec;
#[derive(Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(from = "Raw")]
pub struct Trade {
pub coin: String,
pub side: Side,
pub px: Dec,
pub sz: Dec,
pub time: u64,
pub hash: String,
pub tid: u64,
pub buyer: Address,
pub seller: Address,
}
impl Trade {
#[must_use]
pub const fn users(&self) -> [Address; 2] {
[self.buyer, self.seller]
}
}
#[derive(Deserialize)]
struct Raw {
coin: String,
side: Side,
px: Dec,
sz: Dec,
time: u64,
hash: String,
tid: u64,
users: [Address; 2],
}
impl From<Raw> for Trade {
fn from(raw: Raw) -> Self {
let [buyer, seller] = raw.users;
Trade {
coin: raw.coin,
side: raw.side,
px: raw.px,
sz: raw.sz,
time: raw.time,
hash: raw.hash,
tid: raw.tid,
buyer,
seller,
}
}
}
#[cfg(test)]
#[path = "tests/trades.rs"]
mod tests;