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