1use 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 AddedIntegratorConfig<Otw>,
61 AllocatedCollateral,
62 CanceledOrder,
63 ClosedMarket,
64 ClosedPositionAtSettlementPrices,
65 CreatedAccount<Otw>,
66 CreatedClearingHouse,
67 CreatedIntegratorVault,
68 CreatedMarginRatiosProposal,
69 CreatedOrderbook,
70 CreatedPosition,
71 CreatedPositionFeesProposal,
72 CreatedStopOrderTicket<Otw>,
73 DeallocatedCollateral,
74 DeletedMarginRatiosProposal,
75 DeletedPositionFeesProposal,
76 DeletedStopOrderTicket<Otw>,
77 DepositedCollateral<Otw>,
78 DonatedToInsuranceFund,
79 EditedStopOrderTicketDetails<Otw>,
80 EditedStopOrderTicketExecutors<Otw>,
81 ExecutedStopOrderTicket<Otw>,
82 FilledMakerOrder,
83 FilledMakerOrders,
84 FilledTakerOrder,
85 LiquidatedPosition,
86 PaidIntegratorFees<Otw>,
87 PausedMarket,
88 PerformedLiquidation,
89 PostedOrder,
90 RegisteredCollateralInfo<Otw>,
91 RegisteredMarketInfo<Otw>,
92 RejectedPositionFeesProposal,
93 RemovedIntegratorConfig<Otw>,
94 RemovedRegisteredMarketInfo<Otw>,
95 ResettedPositionFees,
96 ResumedMarket,
97 SetPositionInitialMarginRatio,
98 SettledFunding,
99 UpdatedBaseOracleTolerance,
100 UpdatedClearingHouseVersion,
101 UpdatedCollateralOracleTolerance,
102 UpdatedCumFundings,
103 UpdatedFees,
104 UpdatedFunding,
105 UpdatedFundingParameters,
106 UpdatedGasPriceTwap,
107 UpdatedGasPriceTwapParameters,
108 UpdatedMarginRatios,
109 UpdatedMarketLotAndTick,
110 UpdatedMaxOpenInterest,
111 UpdatedMaxOpenInterestPositionParams,
112 UpdatedMaxPendingOrders,
113 UpdatedMinOrderUsdValue,
114 UpdatedOpenInterestAndFeesAccrued,
115 UpdatedPremiumTwap,
116 UpdatedSpreadTwap,
117 UpdatedSpreadTwapParameters,
118 UpdatedStopOrderMistCost,
119 WithdrewCollateral<Otw>,
120 WithdrewFees,
121 WithdrewFromIntegratorVault,
122 WithdrewInsuranceFund,
123});