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