betex 0.5.3

Betfair / Prediction Market Exchange
Documentation
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,
        }
    }
}