Skip to main content

o2_api_types/responses/
events.rs

1use crate::{
2    OrderId,
3    domain::{
4        book::{
5            Price,
6            Quantity,
7        },
8        event::*,
9        trade::TradeId,
10    },
11    fuel_types::{
12        BlockHeight,
13        Bytes32,
14        ContractId,
15        TxId,
16        TxPointer,
17    },
18    parse::HexDisplayFromStr,
19    primitives::{
20        OrderType,
21        Side,
22    },
23};
24use serde::Serialize;
25use serde_with::{
26    DisplayFromStr,
27    serde_as,
28};
29
30#[derive(Debug, serde::Serialize, serde::Deserialize)]
31pub struct EventPrimaryKey {
32    pub tx_pointer: TxPointer,
33    pub receipt_index: u16,
34}
35
36#[serde_as]
37#[derive(Debug, serde::Serialize)]
38pub struct BlockChainEventResponse<Event> {
39    pub primary_key: EventPrimaryKey,
40    #[serde_as(as = "HexDisplayFromStr")]
41    pub contract_id: ContractId,
42    pub event: Event,
43}
44
45#[derive(Debug, serde::Serialize)]
46pub struct OrderCreatedEventResponse {
47    pub order_id: OrderId,
48    pub trader_id: Identity,
49    pub order_side: Side,
50    pub order_type: OrderType,
51    pub quantity: Quantity,
52    pub price: Price,
53}
54
55#[derive(Debug, serde::Serialize)]
56pub struct OrderMatchedEventResponse {
57    pub trade_id: TradeId,
58    pub quantity: Quantity,
59    pub price: Price,
60}
61
62#[derive(Debug, serde::Serialize)]
63pub struct OrderCancelledEventResponse {
64    pub order_id: Bytes32,
65    pub reason: CancellationReason,
66}
67
68#[derive(Debug, serde::Serialize)]
69pub struct EndOfMarketOrderEventResponse {
70    pub order_id: Bytes32,
71}
72
73#[derive(Debug, serde::Serialize, strum_macros::AsRefStr)]
74#[strum(serialize_all = "snake_case")]
75pub enum EventV1Response {
76    BalanceIncrease(BlockChainEventResponse<BalanceIncrease>),
77    BalanceDecrease(BlockChainEventResponse<BalanceDecrease>),
78    OrderCreated(BlockChainEventResponse<OrderCreatedEventResponse>),
79    OrderCanceled(BlockChainEventResponse<OrderCancelledEventResponse>),
80    EndOfMarketOrder(BlockChainEventResponse<EndOfMarketOrderEventResponse>),
81    TradePerformed(BlockChainEventResponse<OrderMatchedEventResponse>),
82    Withdrawal(BlockChainEventResponse<WithdrawSettledTradeEvent>),
83    Configuration(BlockChainEventResponse<OrderBookConfigEvent>),
84    ConfigurationSymbols(BlockChainEventResponse<OrderBookSymbolsEvent>),
85    ConfigurationWhitelist(BlockChainEventResponse<OrderBookWhitelistEvent>),
86    ConfigurationBlacklist(BlockChainEventResponse<OrderBookBlacklistEvent>),
87    NonceChange(BlockChainEventResponse<NonceChangeEvent>),
88    TradeAccountRegistration(BlockChainEventResponse<TradeAccountRegistered>),
89    TradeAccountReferer(BlockChainEventResponse<TradeAccountReferer>),
90    OrderBookRegistration(BlockChainEventResponse<OrderBookRegistered>),
91    PauseEvent(BlockChainEventResponse<PauseEvent>),
92    UnpauseEvent(BlockChainEventResponse<UnpauseEvent>),
93    FeesClaimedEvent(BlockChainEventResponse<FeesClaimedEvent>),
94    SessionCreated(BlockChainEventResponse<SessionCreated>),
95    SessionRevoked(BlockChainEventResponse<SessionRevoked>),
96}
97
98#[derive(serde::Serialize, Debug)]
99pub enum EventResponse {
100    EventV1(EventV1Response),
101}
102
103#[serde_as]
104#[derive(Serialize, Debug)]
105pub struct TransactionEventsResponse {
106    #[serde_as(as = "HexDisplayFromStr")]
107    pub tx_id: TxId,
108    pub events: Vec<EventResponse>,
109}
110
111#[serde_as]
112#[derive(Serialize, Debug)]
113pub struct HeaderResponse {
114    pub block_height: BlockHeight,
115    #[serde_as(as = "DisplayFromStr")]
116    pub timestamp: u128,
117}
118
119#[derive(Serialize, Debug)]
120pub struct GetEventsResponse {
121    pub header: HeaderResponse,
122    pub events: Vec<TransactionEventsResponse>,
123}