nautilus_model/python/events/order/
mod.rs1use nautilus_core::python::to_pyvalue_err;
17use pyo3::{IntoPyObjectExt, Py, PyAny, PyResult, Python};
18
19use crate::events::{
20 OrderAccepted, OrderCancelRejected, OrderCanceled, OrderDenied, OrderEmulated, OrderEventAny,
21 OrderExpired, OrderFillVoided, OrderFilled, OrderInitialized, OrderModifyRejected,
22 OrderPendingCancel, OrderPendingUpdate, OrderRejected, OrderReleased, OrderSubmitted,
23 OrderTriggered, OrderUpdated,
24};
25
26pub mod accepted;
27pub mod cancel_rejected;
28pub mod canceled;
29pub mod denied;
30pub mod emulated;
31pub mod expired;
32pub mod fill_voided;
33pub mod filled;
34pub mod initialized;
35pub mod modify_rejected;
36pub mod pending_cancel;
37pub mod pending_update;
38pub mod rejected;
39pub mod released;
40pub mod snapshot;
41pub mod submitted;
42pub mod triggered;
43pub mod updated;
44
45pub fn order_event_to_pyobject(py: Python, order_event: OrderEventAny) -> PyResult<Py<PyAny>> {
51 match order_event {
52 OrderEventAny::Initialized(event) => event.into_py_any(py),
53 OrderEventAny::Denied(event) => event.into_py_any(py),
54 OrderEventAny::Emulated(event) => event.into_py_any(py),
55 OrderEventAny::Released(event) => event.into_py_any(py),
56 OrderEventAny::Submitted(event) => event.into_py_any(py),
57 OrderEventAny::Accepted(event) => event.into_py_any(py),
58 OrderEventAny::Rejected(event) => event.into_py_any(py),
59 OrderEventAny::Canceled(event) => event.into_py_any(py),
60 OrderEventAny::Expired(event) => event.into_py_any(py),
61 OrderEventAny::Triggered(event) => event.into_py_any(py),
62 OrderEventAny::PendingUpdate(event) => event.into_py_any(py),
63 OrderEventAny::PendingCancel(event) => event.into_py_any(py),
64 OrderEventAny::ModifyRejected(event) => event.into_py_any(py),
65 OrderEventAny::CancelRejected(event) => event.into_py_any(py),
66 OrderEventAny::Updated(event) => event.into_py_any(py),
67 OrderEventAny::Filled(event) => event.into_py_any(py),
68 OrderEventAny::FillVoided(event) => event.into_py_any(py),
69 }
70}
71
72#[expect(clippy::needless_pass_by_value)]
78pub fn pyobject_to_order_event(py: Python, order_event: Py<PyAny>) -> PyResult<OrderEventAny> {
79 let class = order_event.getattr(py, "__class__")?;
80 match class.getattr(py, "__name__")?.extract::<&str>(py)? {
81 stringify!(OrderAccepted) => Ok(OrderEventAny::Accepted(
82 order_event.extract::<OrderAccepted>(py)?,
83 )),
84 stringify!(OrderCancelRejected) => Ok(OrderEventAny::CancelRejected(
85 order_event.extract::<OrderCancelRejected>(py)?,
86 )),
87 stringify!(OrderCanceled) => Ok(OrderEventAny::Canceled(
88 order_event.extract::<OrderCanceled>(py)?,
89 )),
90 stringify!(OrderDenied) => Ok(OrderEventAny::Denied(
91 order_event.extract::<OrderDenied>(py)?,
92 )),
93 stringify!(OrderEmulated) => Ok(OrderEventAny::Emulated(
94 order_event.extract::<OrderEmulated>(py)?,
95 )),
96 stringify!(OrderExpired) => Ok(OrderEventAny::Expired(
97 order_event.extract::<OrderExpired>(py)?,
98 )),
99 stringify!(OrderFilled) => Ok(OrderEventAny::Filled(
100 order_event.extract::<OrderFilled>(py)?,
101 )),
102 stringify!(OrderFillVoided) => Ok(OrderEventAny::FillVoided(
103 order_event.extract::<OrderFillVoided>(py)?,
104 )),
105 stringify!(OrderInitialized) => Ok(OrderEventAny::Initialized(
106 order_event.extract::<OrderInitialized>(py)?,
107 )),
108 stringify!(OrderModifyRejected) => Ok(OrderEventAny::ModifyRejected(
109 order_event.extract::<OrderModifyRejected>(py)?,
110 )),
111 stringify!(OrderPendingCancel) => Ok(OrderEventAny::PendingCancel(
112 order_event.extract::<OrderPendingCancel>(py)?,
113 )),
114 stringify!(OrderPendingUpdate) => Ok(OrderEventAny::PendingUpdate(
115 order_event.extract::<OrderPendingUpdate>(py)?,
116 )),
117 stringify!(OrderRejected) => Ok(OrderEventAny::Rejected(
118 order_event.extract::<OrderRejected>(py)?,
119 )),
120 stringify!(OrderReleased) => Ok(OrderEventAny::Released(
121 order_event.extract::<OrderReleased>(py)?,
122 )),
123 stringify!(OrderSubmitted) => Ok(OrderEventAny::Submitted(
124 order_event.extract::<OrderSubmitted>(py)?,
125 )),
126 stringify!(OrderTriggered) => Ok(OrderEventAny::Triggered(
127 order_event.extract::<OrderTriggered>(py)?,
128 )),
129 stringify!(OrderUpdated) => Ok(OrderEventAny::Updated(
130 order_event.extract::<OrderUpdated>(py)?,
131 )),
132 _ => Err(to_pyvalue_err(
133 "Error in conversion from `Py<PyAny>` to `OrderEventAny`",
134 )),
135 }
136}