use super::reject::RejectReason;
use crate::{protocol::command::Side, types::*};
use serde::{Deserialize, Serialize};
use smallvec::SmallVec;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct TradeSummary {
pub trade_id: TradeId,
pub maker_order_id: OrderId,
pub maker_side: Side,
pub taker_order_id: OrderId,
pub taker_side: Side,
pub price: FillPrice,
pub quantity: FillQuantity,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[allow(clippy::large_enum_variant)]
pub enum Response {
Ok {
correlation_id: CorrelationId,
order_id: Option<OrderId>,
trades: SmallVec<[TradeSummary; 4]>,
liability_delta: Money,
last_event_seq: u64,
},
Rejected {
correlation_id: CorrelationId,
reason: RejectReason,
last_event_seq: u64,
},
Fatal {
correlation_id: CorrelationId,
last_event_seq: u64,
},
}
impl Response {
pub fn fatal(correlation_id: CorrelationId, last_event_seq: u64) -> Self {
Self::Fatal {
correlation_id,
last_event_seq,
}
}
pub fn last_event_seq(&self) -> u64 {
match self {
Self::Ok { last_event_seq, .. }
| Self::Rejected { last_event_seq, .. }
| Self::Fatal { last_event_seq, .. } => *last_event_seq,
}
}
pub fn set_last_event_seq(&mut self, seq: u64) {
match self {
Self::Ok { last_event_seq, .. }
| Self::Rejected { last_event_seq, .. }
| Self::Fatal { last_event_seq, .. } => *last_event_seq = seq,
}
}
}