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