architect_api/cpty/
galaxy.rs1use crate::{folio::FolioMessage, orderflow::*, symbology::market::NormalizedMarketInfo};
2use compact_str::CompactString;
3#[cfg(feature = "netidx")]
4use derive::FromValue;
5use log::error;
6#[cfg(feature = "netidx")]
7use netidx_derive::Pack;
8use rust_decimal::Decimal;
9use rust_decimal_macros::dec;
10use schemars::JsonSchema;
11use serde_derive::{Deserialize, Serialize};
12use std::ops::{Deref, DerefMut};
13
14#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
15#[cfg_attr(feature = "netidx", derive(Pack))]
16pub struct GalaxyMarketInfo {
17 pub tick_size: Decimal,
18}
19
20impl NormalizedMarketInfo for GalaxyMarketInfo {
21 fn tick_size(&self) -> Decimal {
22 self.tick_size
23 }
24
25 fn step_size(&self) -> Decimal {
27 self.tick_size
28 }
29
30 fn is_delisted(&self) -> bool {
31 false
32 }
33}
34
35impl std::fmt::Display for GalaxyMarketInfo {
36 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
37 write!(f, "{}", serde_json::to_string_pretty(self).unwrap())?;
38 Ok(())
39 }
40}
41
42impl Default for GalaxyMarketInfo {
43 fn default() -> GalaxyMarketInfo {
44 GalaxyMarketInfo {
45 tick_size: dec!(0.00000001),
47 }
48 }
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
52#[cfg_attr(feature = "netidx", derive(Pack))]
53#[cfg_attr(feature = "netidx", derive(FromValue))]
54pub enum GalaxyMessage {
55 Order(GalaxyOrder),
56 Cancel(Cancel),
57 Ack(GalaxyAck),
58 Reject(Reject),
59 Fill(GalaxyFill),
60 Out(Out),
61 Folio(FolioMessage),
62}
63
64impl TryInto<GalaxyMessage> for &OrderflowMessage {
65 type Error = ();
66
67 fn try_into(self) -> Result<GalaxyMessage, ()> {
68 match self {
69 OrderflowMessage::Order(o) => {
70 Ok(GalaxyMessage::Order(GalaxyOrder { order: *o }))
71 }
72 OrderflowMessage::Cancel(cancel) => Ok(GalaxyMessage::Cancel(*cancel)),
73 OrderflowMessage::CancelAll(_) => {
74 Err(error!("Cancel all not implemented for Galaxy"))
75 }
76 OrderflowMessage::Ack(_)
77 | OrderflowMessage::Reject(_)
78 | OrderflowMessage::Fill(_)
79 | OrderflowMessage::Out(_) => Err(()),
80 }
81 }
82}
83
84impl TryInto<OrderflowMessage> for &GalaxyMessage {
85 type Error = ();
86
87 fn try_into(self) -> Result<OrderflowMessage, ()> {
88 match self {
89 GalaxyMessage::Order(o) => Ok(OrderflowMessage::Order(**o)),
90 GalaxyMessage::Ack(a) => Ok(OrderflowMessage::Ack(**a)),
91 GalaxyMessage::Reject(r) => Ok(OrderflowMessage::Reject(r.clone())),
92 GalaxyMessage::Fill(f, ..) => Ok(OrderflowMessage::Fill(**f)),
93 GalaxyMessage::Out(o) => Ok(OrderflowMessage::Out(*o)),
94 GalaxyMessage::Cancel(c) => Ok(OrderflowMessage::Cancel(*c)),
95 GalaxyMessage::Folio(_) => Err(()),
96 }
97 }
98}
99
100#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema)]
101#[cfg_attr(feature = "netidx", derive(Pack))]
102pub struct GalaxyOrder {
103 #[serde(flatten)]
104 pub order: Order,
105}
106
107impl Deref for GalaxyOrder {
108 type Target = Order;
109
110 fn deref(&self) -> &Self::Target {
111 &self.order
112 }
113}
114
115impl DerefMut for GalaxyOrder {
116 fn deref_mut(&mut self) -> &mut Self::Target {
117 &mut self.order
118 }
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
122#[cfg_attr(feature = "netidx", derive(Pack))]
123pub struct GalaxyAck {
124 #[serde(flatten)]
125 pub ack: Ack,
126 pub exchange_order_id: CompactString,
127}
128
129impl Deref for GalaxyAck {
130 type Target = Ack;
131
132 fn deref(&self) -> &Self::Target {
133 &self.ack
134 }
135}
136
137#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
138#[cfg_attr(feature = "netidx", derive(Pack))]
139pub struct GalaxyFill {
140 #[serde(flatten)]
141 pub fill: Result<Fill, AberrantFill>,
142 pub leaves_qty: Decimal,
143}
144
145impl Deref for GalaxyFill {
146 type Target = Result<Fill, AberrantFill>;
147
148 fn deref(&self) -> &Self::Target {
149 &self.fill
150 }
151}