df_hyperliquid_core/trade/
action.rs1use crate::trade::manage::{BatchModify, Modify};
5use crate::trade::manage::{Cancel, CancelByCloid};
6use crate::trade::manage::{Noop, ScheduleCancel};
7use crate::trade::margin::{UpdateIsolatedMargin, UpdateLeverage};
8use crate::trade::orders::PlaceOrder;
9use crate::trade::orders::{Twap, TwapCancel};
10use crate::utils::sign::{L1Action, Map};
11
12#[derive(Debug, Clone, PartialEq, Eq)]
13pub enum TradeAction {
14 Place(PlaceOrder),
15 Cancel(Cancel),
16 CancelByCloid(CancelByCloid),
17 Modify(Modify),
18 BatchModify(BatchModify),
19 Twap(Twap),
20 TwapCancel(TwapCancel),
21 Leverage(UpdateLeverage),
22 Margin(UpdateIsolatedMargin),
23 ScheduleCancel(ScheduleCancel),
24 Noop(Noop),
25}
26
27impl TradeAction {
28 #[must_use]
30 pub const fn kind(&self) -> &'static str {
31 match self {
32 TradeAction::Place(_) => "order",
33 TradeAction::Cancel(_) => "cancel",
34 TradeAction::CancelByCloid(_) => "cancelByCloid",
35 TradeAction::Modify(_) => "modify",
36 TradeAction::BatchModify(_) => "batchModify",
37 TradeAction::Twap(_) => "twapOrder",
38 TradeAction::TwapCancel(_) => "twapCancel",
39 TradeAction::Leverage(_) => "updateLeverage",
40 TradeAction::Margin(_) => "updateIsolatedMargin",
41 TradeAction::ScheduleCancel(_) => "scheduleCancel",
42 TradeAction::Noop(_) => "noop",
43 }
44 }
45
46 #[must_use]
49 pub fn items(&self) -> Option<usize> {
50 match self {
51 TradeAction::Place(place) => Some(place.orders().len()),
52 TradeAction::Cancel(cancel) => Some(cancel.cancels().len()),
53 TradeAction::CancelByCloid(cancel) => Some(cancel.cancels().len()),
54 TradeAction::BatchModify(batch) => Some(batch.modifies().len()),
55 _ => None,
56 }
57 }
58}
59
60impl L1Action for TradeAction {
61 fn action(&self) -> Map {
62 match self {
63 TradeAction::Place(action) => action.action(),
64 TradeAction::Cancel(action) => action.action(),
65 TradeAction::CancelByCloid(action) => action.action(),
66 TradeAction::Modify(action) => action.action(),
67 TradeAction::BatchModify(action) => action.action(),
68 TradeAction::Twap(action) => action.action(),
69 TradeAction::TwapCancel(action) => action.action(),
70 TradeAction::Leverage(action) => action.action(),
71 TradeAction::Margin(action) => action.action(),
72 TradeAction::ScheduleCancel(action) => action.action(),
73 TradeAction::Noop(action) => action.action(),
74 }
75 }
76}
77
78macro_rules! from {
79 ($($action:ident => $variant:ident),* $(,)?) => {
80 $(impl From<$action> for TradeAction {
81 fn from(action: $action) -> TradeAction {
82 TradeAction::$variant(action)
83 }
84 })*
85 };
86}
87
88from! {
89 PlaceOrder => Place,
90 Cancel => Cancel,
91 CancelByCloid => CancelByCloid,
92 Modify => Modify,
93 BatchModify => BatchModify,
94 Twap => Twap,
95 TwapCancel => TwapCancel,
96 UpdateLeverage => Leverage,
97 UpdateIsolatedMargin => Margin,
98 ScheduleCancel => ScheduleCancel,
99 Noop => Noop,
100}
101
102#[cfg(test)]
103#[path = "tests/action.rs"]
104mod tests;