nautilus_model/python/events/order/
mod.rs1use nautilus_core::python::{IntoPyObjectNautilusExt, to_pyvalue_err};
17use pyo3::{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_any_unwrap(py)),
46 OrderEventAny::Denied(event) => Ok(event.into_py_any_unwrap(py)),
47 OrderEventAny::Emulated(event) => Ok(event.into_py_any_unwrap(py)),
48 OrderEventAny::Released(event) => Ok(event.into_py_any_unwrap(py)),
49 OrderEventAny::Submitted(event) => Ok(event.into_py_any_unwrap(py)),
50 OrderEventAny::Accepted(event) => Ok(event.into_py_any_unwrap(py)),
51 OrderEventAny::Rejected(event) => Ok(event.into_py_any_unwrap(py)),
52 OrderEventAny::Canceled(event) => Ok(event.into_py_any_unwrap(py)),
53 OrderEventAny::Expired(event) => Ok(event.into_py_any_unwrap(py)),
54 OrderEventAny::Triggered(event) => Ok(event.into_py_any_unwrap(py)),
55 OrderEventAny::PendingUpdate(event) => Ok(event.into_py_any_unwrap(py)),
56 OrderEventAny::PendingCancel(event) => Ok(event.into_py_any_unwrap(py)),
57 OrderEventAny::ModifyRejected(event) => Ok(event.into_py_any_unwrap(py)),
58 OrderEventAny::CancelRejected(event) => Ok(event.into_py_any_unwrap(py)),
59 OrderEventAny::Updated(event) => Ok(event.into_py_any_unwrap(py)),
60 OrderEventAny::Filled(event) => Ok(event.into_py_any_unwrap(py)),
61 }
62}
63
64pub fn pyobject_to_order_event(py: Python, order_event: PyObject) -> PyResult<OrderEventAny> {
65 let class = order_event.getattr(py, "__class__")?;
66 match class.getattr(py, "__name__")?.extract::<&str>(py)? {
67 stringify!(OrderAccepted) => Ok(OrderEventAny::Accepted(
68 order_event.extract::<OrderAccepted>(py)?,
69 )),
70 stringify!(OrderCancelRejected) => Ok(OrderEventAny::CancelRejected(
71 order_event.extract::<OrderCancelRejected>(py)?,
72 )),
73 stringify!(OrderCanceled) => Ok(OrderEventAny::Canceled(
74 order_event.extract::<OrderCanceled>(py)?,
75 )),
76 stringify!(OrderDenied) => Ok(OrderEventAny::Denied(
77 order_event.extract::<OrderDenied>(py)?,
78 )),
79 stringify!(OrderEmulated) => Ok(OrderEventAny::Emulated(
80 order_event.extract::<OrderEmulated>(py)?,
81 )),
82 stringify!(OrderExpired) => Ok(OrderEventAny::Expired(
83 order_event.extract::<OrderExpired>(py)?,
84 )),
85 stringify!(OrderFilled) => Ok(OrderEventAny::Filled(
86 order_event.extract::<OrderFilled>(py)?,
87 )),
88 stringify!(OrderInitialized) => Ok(OrderEventAny::Initialized(
89 order_event.extract::<OrderInitialized>(py)?,
90 )),
91 stringify!(OrderModifyRejected) => Ok(OrderEventAny::ModifyRejected(
92 order_event.extract::<OrderModifyRejected>(py)?,
93 )),
94 stringify!(OrderPendingCancel) => Ok(OrderEventAny::PendingCancel(
95 order_event.extract::<OrderPendingCancel>(py)?,
96 )),
97 stringify!(OrderPendingUpdate) => Ok(OrderEventAny::PendingUpdate(
98 order_event.extract::<OrderPendingUpdate>(py)?,
99 )),
100 stringify!(OrderRejected) => Ok(OrderEventAny::Rejected(
101 order_event.extract::<OrderRejected>(py)?,
102 )),
103 stringify!(OrderReleased) => Ok(OrderEventAny::Released(
104 order_event.extract::<OrderReleased>(py)?,
105 )),
106 stringify!(OrderSubmitted) => Ok(OrderEventAny::Submitted(
107 order_event.extract::<OrderSubmitted>(py)?,
108 )),
109 stringify!(OrderTriggered) => Ok(OrderEventAny::Triggered(
110 order_event.extract::<OrderTriggered>(py)?,
111 )),
112 stringify!(OrderUpdated) => Ok(OrderEventAny::Updated(
113 order_event.extract::<OrderUpdated>(py)?,
114 )),
115 _ => Err(to_pyvalue_err(
116 "Error in conversion from `PyObject` to `OrderEventAny`",
117 )),
118 }
119}