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 CreatedMarginRatiosProposal,
66 CreatedOrderbook,
67 CreatedPosition,
68 CreatedPositionFeesProposal,
69 CreatedStopOrderTicket<Otw>,
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 PaidIntegratorFees<Otw>,
84 PerformedLiquidation,
85 PostedOrder,
86 RegisteredCollateralInfo<Otw>,
87 RegisteredMarketInfo<Otw>,
88 RejectedPositionFeesProposal,
89 RemovedIntegratorConfig<Otw>,
90 RemovedRegisteredMarketInfo<Otw>,
91 ResettedPositionFees,
92 SetPositionInitialMarginRatio,
93 SettledFunding,
94 UpdatedBaseOracleTolerance,
95 UpdatedClearingHouseVersion,
96 UpdatedCollateralOracleTolerance,
97 UpdatedCumFundings,
98 UpdatedFees,
99 UpdatedFunding,
100 UpdatedFundingParameters,
101 UpdatedGasPriceTwap,
102 UpdatedMarginRatios,
103 UpdatedMaxOpenInterest,
104 UpdatedMaxOpenInterestPositionParams,
105 UpdatedMaxPendingOrders,
106 UpdatedMinOrderUsdValue,
107 UpdatedOpenInterestAndFeesAccrued,
108 UpdatedPremiumTwap,
109 UpdatedSpreadTwap,
110 UpdatedSpreadTwapParameters,
111 UpdatedStopOrderMistCost,
112 WithdrewCollateral<Otw>,
113 WithdrewFees,
114 WithdrewInsuranceFund,
115});