nautilus_model/reports/
fill.rs1use std::fmt::Display;
17
18use nautilus_core::{UUID4, UnixNanos};
19use serde::{Deserialize, Serialize};
20
21use crate::{
22 enums::{LiquiditySide, OrderSide},
23 identifiers::{AccountId, ClientOrderId, InstrumentId, PositionId, TradeId, VenueOrderId},
24 types::{Money, Price, Quantity},
25};
26
27#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
29#[serde(tag = "type")]
30#[cfg_attr(
31 feature = "python",
32 pyo3::pyclass(module = "posei_trader.core.nautilus_pyo3.model")
33)]
34pub struct FillReport {
35 pub account_id: AccountId,
37 pub instrument_id: InstrumentId,
39 pub venue_order_id: VenueOrderId,
41 pub trade_id: TradeId,
43 pub order_side: OrderSide,
45 pub last_qty: Quantity,
47 pub last_px: Price,
49 pub commission: Money,
51 pub liquidity_side: LiquiditySide,
53 pub report_id: UUID4,
55 pub ts_event: UnixNanos,
57 pub ts_init: UnixNanos,
59 pub client_order_id: Option<ClientOrderId>,
61 pub venue_position_id: Option<PositionId>,
63}
64
65impl FillReport {
66 #[allow(clippy::too_many_arguments)]
68 #[must_use]
69 pub fn new(
70 account_id: AccountId,
71 instrument_id: InstrumentId,
72 venue_order_id: VenueOrderId,
73 trade_id: TradeId,
74 order_side: OrderSide,
75 last_qty: Quantity,
76 last_px: Price,
77 commission: Money,
78 liquidity_side: LiquiditySide,
79 client_order_id: Option<ClientOrderId>,
80 venue_position_id: Option<PositionId>,
81 ts_event: UnixNanos,
82 ts_init: UnixNanos,
83 report_id: Option<UUID4>,
84 ) -> Self {
85 Self {
86 account_id,
87 instrument_id,
88 venue_order_id,
89 trade_id,
90 order_side,
91 last_qty,
92 last_px,
93 commission,
94 liquidity_side,
95 report_id: report_id.unwrap_or_default(),
96 ts_event,
97 ts_init,
98 client_order_id,
99 venue_position_id,
100 }
101 }
102
103 #[must_use]
105 pub const fn has_client_order_id(&self) -> bool {
106 self.client_order_id.is_some()
107 }
108
109 #[must_use]
111 pub const fn has_venue_position_id(&self) -> bool {
112 self.venue_position_id.is_some()
113 }
114}
115
116impl Display for FillReport {
117 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
118 write!(
119 f,
120 "FillReport(instrument={}, side={}, qty={}, last_px={}, trade_id={}, venue_order_id={}, commission={}, liquidity={})",
121 self.instrument_id,
122 self.order_side,
123 self.last_qty,
124 self.last_px,
125 self.trade_id,
126 self.venue_order_id,
127 self.commission,
128 self.liquidity_side,
129 )
130 }
131}