1use serde::{Deserialize, Serialize};
4use uuid::Uuid;
5
6pub type OrderId = Uuid;
8
9pub type TradeId = Uuid;
11
12pub type InstrumentId = String;
14
15#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
17pub struct CurrencyPair {
18 pub base: String,
19 pub quote: String,
20}
21
22impl CurrencyPair {
23 pub fn new(base: impl Into<String>, quote: impl Into<String>) -> Self {
24 Self {
25 base: base.into(),
26 quote: quote.into(),
27 }
28 }
29
30 pub fn as_string(&self) -> String {
31 format!("{}{}", self.base, self.quote)
32 }
33}
34
35#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
37pub struct Price(pub u64);
38
39impl Price {
40 pub fn from_decimal(value: f64, decimals: u8) -> Self {
43 let multiplier = 10_u64.pow(decimals as u32);
44 Self((value * multiplier as f64) as u64)
45 }
46
47 pub fn to_decimal(self, decimals: u8) -> f64 {
49 let divisor = 10_u64.pow(decimals as u32);
50 self.0 as f64 / divisor as f64
51 }
52}
53
54#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
56pub struct Quantity(pub u64);
57
58#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
60pub enum Side {
61 Buy,
62 Sell,
63}
64
65#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
67pub enum OrderType {
68 Market,
69 Limit,
70 Stop,
71 IoC, FoK, }