defuse_core/events/
mod.rs

1use derive_more::derive::From;
2use near_sdk::{near, 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#[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.4.3")]
25    #[from(skip)]
26    PublicKeyAdded(MaybeIntentEvent<AccountEvent<'a, PublicKeyEvent<'a>>>),
27    #[event_version("0.4.3")]
28    #[from(skip)]
29    PublicKeyRemoved(MaybeIntentEvent<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.4.3")]
37    Transfer(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, TransferEvent<'a>>>]>),
38
39    #[event_version("0.4.3")]
40    TokenDiff(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, TokenDiffEvent<'a>>>]>),
41
42    #[event_version("0.4.3")]
43    IntentsExecuted(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, NonceEvent>>]>),
44
45    #[event_version("0.4.3")]
46    FtWithdraw(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, Cow<'a, FtWithdraw>>>]>),
47
48    #[event_version("0.4.3")]
49    NftWithdraw(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, Cow<'a, NftWithdraw>>>]>),
50
51    #[event_version("0.4.3")]
52    MtWithdraw(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, Cow<'a, MtWithdraw>>>]>),
53
54    #[event_version("0.4.3")]
55    NativeWithdraw(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, Cow<'a, NativeWithdraw>>>]>),
56
57    #[event_version("0.4.3")]
58    StorageDeposit(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, Cow<'a, StorageDeposit>>>]>),
59
60    #[cfg(feature = "imt")]
61    #[event_version("0.4.3")]
62    ImtMint(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, ImtMintEvent<'a>>>]>),
63    #[cfg(feature = "imt")]
64    #[event_version("0.4.3")]
65    ImtBurn(Cow<'a, [MaybeIntentEvent<AccountEvent<'a, Cow<'a, ImtBurn>>>]>),
66
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.4.3")]
75    SetAuthByPredecessorId(MaybeIntentEvent<AccountEvent<'a, Cow<'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>> {}
89
90#[cfg(test)]
91mod tests;