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 AddedStopOrderTicketCollateral<Otw>,
61 AllocatedCollateral,
62 CanceledOrder,
63 CreatedAccount<Otw>,
64 CreatedClearingHouse,
65 CreatedMarginRatiosProposal,
66 CreatedOrderbook,
67 CreatedPosition,
68 CreatedPositionFeesProposal,
69 CreatedStopOrderTicket<Otw>,
70 CreatedSubAccount,
71 DeallocatedCollateral,
72 DeletedMarginRatiosProposal,
73 DeletedPositionFeesProposal,
74 DeletedStopOrderTicket<Otw>,
75 DeletedSubAccount,
76 DepositedCollateral<Otw>,
77 DonatedToInsuranceFund,
78 EditedStopOrderTicketDetails<Otw>,
79 EditedStopOrderTicketExecutor<Otw>,
80 ExecutedStopOrderTicket<Otw>,
81 FilledMakerOrder,
82 FilledMakerOrders,
83 FilledTakerOrder,
84 LiquidatedPosition,
85 OrderbookPostReceipt,
86 PerfomedLiquidation,
87 ReceivedCollateral<Otw>,
88 RegisteredCollateralInfo<Otw>,
89 RegisteredMarketInfo<Otw>,
90 RejectedPositionFeesProposal,
91 RemovedRegisteredMarketInfo<Otw>,
92 RemovedStopOrderTicketCollateral<Otw>,
93 ResettedPositionFees,
94 SetSubAccountUser,
95 SettledFunding,
96 TransferredDeallocatedCollateral<Otw>,
97 UpdatedBaseOracleTolerance,
98 UpdatedClearingHouseVersion,
99 UpdatedCollateralOracleTolerance,
100 UpdatedCumFundings,
101 UpdatedFees,
102 UpdatedFunding,
103 UpdatedFundingParameters,
104 UpdatedLiquidationTolerance,
105 UpdatedMarginRatios,
106 UpdatedMaxOpenInterest,
107 UpdatedMaxOpenInterestPositionParams,
108 UpdatedMaxPendingOrders,
109 UpdatedMinOrderUsdValue,
110 UpdatedOpenInterestAndFeesAccrued,
111 UpdatedPremiumTwap,
112 UpdatedSpreadTwap,
113 UpdatedSpreadTwapParameters,
114 UpdatedStopOrderMistCost,
115 WithdrewCollateral<Otw>,
116 WithdrewFees,
117 WithdrewInsuranceFund,
118});