use serde::{Deserialize, Serialize};
use crate::account::Balance;
use crate::command::{CommandLifecycleEvent, CommandReceipt};
use crate::market::{FastBookTop, FastKline, FastTicker, FastTrade, FundingRate, OpenInterest};
use crate::market::{FastLiquidation, FastMarkPrice, FastOrderBookDelta};
use crate::position::Position;
use crate::primitives::SequenceNumber;
use crate::trade::{Execution, Order};
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct LanePolicy {
pub lossless: bool,
pub coalescing_allowed: bool,
pub buffer_capacity: usize,
pub reconnect_required: bool,
pub idempotent: bool,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct LaneSet {
pub public: LanePolicy,
pub private: LanePolicy,
pub command: LanePolicy,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum PublicLaneEvent {
Ticker(FastTicker),
Trade(FastTrade),
BookTop(FastBookTop),
OrderBookDelta(FastOrderBookDelta),
Kline(FastKline),
MarkPrice(FastMarkPrice),
FundingRate(FundingRate),
OpenInterest(OpenInterest),
Liquidation(FastLiquidation),
Divergence(DivergenceEvent),
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum DivergenceEvent {
ReconcileRequired,
StateDivergence,
SequenceGap { at: Option<SequenceNumber> },
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum PrivateLaneEvent {
Balance(Balance),
Position(Position),
Order(Order),
Execution(Execution),
Divergence(DivergenceEvent),
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub enum CommandLaneEvent {
Receipt(CommandReceipt),
Lifecycle(CommandLifecycleEvent),
}