af_iperps/
event_instance.rs1use af_move_type::otw::Otw;
2use af_move_type::{FromRawStructError, MoveInstance};
3use af_sui_types::StructTag;
4use derive_more::{Display, From, IsVariant, TryInto};
5
6#[derive(thiserror::Error, Debug)]
7pub enum FromRawEventError {
8 #[error(transparent)]
9 FromRawStruct(#[from] FromRawStructError),
10 #[error("Not a Perpetuals event name: {0}")]
11 Name(String),
12}
13
14macro_rules! event_instance {
17 ($Enum:ident {
18 $($variant:ident$(<$($T:ident),+>)?),+ $(,)?
19 }) => {
20 #[remain::sorted]
25 #[derive(Clone, Debug, Display, From, IsVariant, TryInto)]
26 #[non_exhaustive]
27 pub enum $Enum {
28 $(
29 $variant(MoveInstance<crate::events::$variant$(<$($T),+>)?>)
30 ),+
31 }
32
33 impl $Enum {
34 pub fn new(type_: StructTag, bcs: impl AsRef<[u8]>) -> Result<Self, FromRawEventError> {
35 let name = type_.name.to_string();
36 let name_str = name.as_str();
37 Ok(match name_str {
38 $(
39 stringify!($variant) => Self::$variant(MoveInstance::from_raw_struct(
40 type_, bcs.as_ref()
41 )?),
42 )+
43 name => return Err(FromRawEventError::Name(name.to_owned())),
44 })
45 }
46
47 pub fn struct_tag(&self) -> StructTag {
48 match self {
49 $(
50 Self::$variant(inner) => inner.type_.clone().into(),
51 )+
52 }
53 }
54 }
55 };
56}
57
58event_instance!(EventInstance {
59 AcceptedPositionFeesProposal,
60 AllocatedCollateral,
61 CanceledOrder,
62 CreatedAccount<Otw>,
63 CreatedClearingHouse,
64 CreatedMarginRatiosProposal,
65 CreatedOrderbook,
66 CreatedPosition,
67 CreatedPositionFeesProposal,
68 CreatedStopOrderTicket<Otw>,
69 CreatedSubAccount,
70 DeallocatedCollateral,
71 DeletedMarginRatiosProposal,
72 DeletedPositionFeesProposal,
73 DeletedStopOrderTicket<Otw>,
74 DepositedCollateral<Otw>,
75 DonatedToInsuranceFund,
76 EditedStopOrderTicketDetails<Otw>,
77 EditedStopOrderTicketExecutors<Otw>,
78 ExecutedStopOrderTicket<Otw>,
79 FilledMakerOrder,
80 FilledMakerOrders,
81 FilledTakerOrder,
82 LiquidatedPosition,
83 PerformedLiquidation,
84 PostedOrder,
85 RegisteredCollateralInfo<Otw>,
86 RegisteredMarketInfo<Otw>,
87 RejectedPositionFeesProposal,
88 RemovedRegisteredMarketInfo<Otw>,
89 ResettedPositionFees,
90 SetPositionInitialMarginRatio,
91 SetSubAccountUsers,
92 SettledFunding,
93 UpdatedBaseOracleTolerance,
94 UpdatedClearingHouseVersion,
95 UpdatedCollateralOracleTolerance,
96 UpdatedCumFundings,
97 UpdatedFees,
98 UpdatedFunding,
99 UpdatedFundingParameters,
100 UpdatedLiquidationTolerance,
101 UpdatedMarginRatios,
102 UpdatedMaxOpenInterest,
103 UpdatedMaxOpenInterestPositionParams,
104 UpdatedMaxPendingOrders,
105 UpdatedMinOrderUsdValue,
106 UpdatedOpenInterestAndFeesAccrued,
107 UpdatedPremiumTwap,
108 UpdatedSpreadTwap,
109 UpdatedSpreadTwapParameters,
110 UpdatedStopOrderMistCost,
111 WithdrewCollateral<Otw>,
112 WithdrewFees,
113 WithdrewInsuranceFund,
114});