1use derive_more::derive::From;
2use serde::Deserialize;
3use std::borrow::Cow;
4
5use crate::{
6 accounts::{AccountEvent, NonceEvent, PublicKeyEvent, SaltRotationEvent},
7 fees::{FeeChangedEvent, FeeCollectorChangedEvent},
8 intents::{
9 MaybeIntentEvent,
10 account::SetAuthByPredecessorId,
11 token_diff::TokenDiffEvent,
12 tokens::{FtWithdraw, MtWithdraw, NativeWithdraw, NftWithdraw, StorageDeposit},
13 },
14 tokens::TransferEvent,
15};
16
17#[cfg(feature = "imt")]
18use crate::{intents::imt::ImtBurn, tokens::imt::ImtMintEvent};
19
20#[cfg_attr(feature = "schemars-v0_8", derive(::schemars::JsonSchema))]
21#[cfg_attr(
22 not(feature = "near-contract"),
23 derive(::serde::Serialize),
24 serde(tag = "event", content = "data", rename_all = "snake_case")
25)]
26#[cfg_attr(
27 feature = "near-contract",
28 must_use = "make sure to `.emit()` this event",
29 ::near_sdk::near(event_json(standard = "dip4"))
30)]
31#[derive(Debug, Clone, Deserialize, From)]
32pub enum DefuseEvent<'a> {
33 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
34 #[from(skip)]
35 PublicKeyAdded(MaybeIntentEvent<AccountEvent<'a, PublicKeyEvent<'a>>>),
36
37 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
38 #[from(skip)]
39 PublicKeyRemoved(MaybeIntentEvent<AccountEvent<'a, PublicKeyEvent<'a>>>),
40
41 #[cfg_attr(feature = "near-contract", event_version("0.3.0"))]
42 FeeChanged(FeeChangedEvent),
43 #[cfg_attr(feature = "near-contract", event_version("0.3.0"))]
44 FeeCollectorChanged(FeeCollectorChangedEvent<'a>),
45
46 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
47 Transfer(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, TransferEvent<'a>>>]>),
48
49 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
50 TokenDiff(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, TokenDiffEvent<'a>>>]>),
51
52 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
53 IntentsExecuted(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, NonceEvent>>]>),
54
55 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
56 FtWithdraw(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, Cow<'a, FtWithdraw>>>]>),
57
58 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
59 NftWithdraw(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, Cow<'a, NftWithdraw>>>]>),
60
61 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
62 MtWithdraw(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, Cow<'a, MtWithdraw>>>]>),
63
64 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
65 NativeWithdraw(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, Cow<'a, NativeWithdraw>>>]>),
66
67 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
68 StorageDeposit(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, Cow<'a, StorageDeposit>>>]>),
69
70 #[cfg(feature = "imt")]
71 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
72 ImtMint(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, ImtMintEvent<'a>>>]>),
73 #[cfg(feature = "imt")]
74 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
75 ImtBurn(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, Cow<'a, ImtBurn>>>]>),
76
77 #[cfg_attr(feature = "near-contract", event_version("0.3.0"))]
78 #[from(skip)]
79 AccountLocked(AccountEvent<'a, ()>),
80 #[cfg_attr(feature = "near-contract", event_version("0.3.0"))]
81 #[from(skip)]
82 AccountUnlocked(AccountEvent<'a, ()>),
83
84 #[cfg_attr(feature = "near-contract", event_version("0.4.3"))]
85 SetAuthByPredecessorId(MaybeIntentEvent<AccountEvent<'a, Cow<'a, SetAuthByPredecessorId>>>),
86
87 #[cfg_attr(feature = "near-contract", event_version("0.4.0"))]
88 SaltRotation(SaltRotationEvent),
89}
90
91#[cfg(feature = "near-contract")]
92pub trait DefuseIntentEmit<'a>: Into<DefuseEvent<'a>> {
93 #[inline]
94 fn emit(self) {
95 DefuseEvent::emit(&self.into());
96 }
97}
98
99#[cfg(feature = "near-contract")]
100impl<'a, T> DefuseIntentEmit<'a> for T where T: Into<DefuseEvent<'a>> {}
101
102#[cfg(test)]
103mod tests;