Skip to main content

defuse_core/events/
mod.rs

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;