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