use std::borrow::Cow; use derive_more::derive::From; use near_sdk::{near, serde::Deserialize}; use crate::{ accounts::{AccountEvent, NonceEvent, PublicKeyEvent, SaltRotationEvent, TransferEvent}, fees::{FeeChangedEvent, FeeCollectorChangedEvent}, intents::{ IntentEvent, account::SetAuthByPredecessorId, token_diff::TokenDiffEvent, tokens::{FtWithdraw, MtWithdraw, NativeWithdraw, NftWithdraw, StorageDeposit}, }, }; #[must_use = "make sure to `.emit()` this event"] #[near(event_json(standard = "dip4"))] #[derive(Debug, Clone, Deserialize, From)] pub enum DefuseEvent<'a> { #[event_version("0.3.0")] #[from(skip)] PublicKeyAdded(AccountEvent<'a, PublicKeyEvent<'a>>), #[event_version("0.3.0")] #[from(skip)] PublicKeyRemoved(AccountEvent<'a, PublicKeyEvent<'a>>), #[event_version("0.3.0")] FeeChanged(FeeChangedEvent), #[event_version("0.3.0")] FeeCollectorChanged(FeeCollectorChangedEvent<'a>), #[event_version("0.3.0")] Transfer(Cow<'a, [IntentEvent>>]>), #[event_version("0.3.0")] TokenDiff(Cow<'a, [IntentEvent>>]>), #[event_version("0.3.1")] IntentsExecuted(Cow<'a, [IntentEvent>]>), #[event_version("0.3.0")] FtWithdraw(Cow<'a, [IntentEvent>>]>), #[event_version("0.3.0")] NftWithdraw(Cow<'a, [IntentEvent>>]>), #[event_version("0.3.0")] MtWithdraw(Cow<'a, [IntentEvent>>]>), #[event_version("0.3.0")] NativeWithdraw(Cow<'a, [IntentEvent>>]>), #[event_version("0.3.0")] StorageDeposit(Cow<'a, [IntentEvent>>]>), #[event_version("0.3.0")] #[from(skip)] AccountLocked(AccountEvent<'a, ()>), #[event_version("0.3.0")] #[from(skip)] AccountUnlocked(AccountEvent<'a, ()>), #[event_version("0.3.0")] SetAuthByPredecessorId(AccountEvent<'a, SetAuthByPredecessorId>), #[event_version("0.4.0")] SaltRotation(SaltRotationEvent), } pub trait DefuseIntentEmit<'a>: Into> { #[inline] fn emit(self) { DefuseEvent::emit(&self.into()); } } impl<'a, T> DefuseIntentEmit<'a> for T where T: Into> {}