1use super::TokenId;
2use derive_more::derive::From;
3use near_account_id::AccountIdRef;
4use std::borrow::Cow;
5
6#[cfg(feature = "serde")]
7use {defuse_serde_utils::AsCowSlice, serde_with::DisplayFromStr};
8
9#[cfg_attr(
10 feature = "serde",
11 derive(::serde::Deserialize),
12 cfg_attr(feature = "schemars-v0_8", derive(::schemars::JsonSchema)),
13 cfg_attr(
14 not(feature = "near-contract"),
15 derive(::serde::Serialize),
16 serde(tag = "event", content = "data", rename_all = "snake_case")
17 ),
18 cfg_attr(
19 feature = "near-contract",
20 must_use = "make sure to `.emit()` this event",
21 ::near_sdk::near(event_json(standard = "nep245"))
22 )
23)]
24#[derive(Debug, Clone, From)]
25pub enum MtEvent<'a> {
26 #[cfg_attr(feature = "near-contract", event_version("1.0.0"))]
27 MtMint(Cow<'a, [MtMintEvent<'a>]>),
28 #[cfg_attr(feature = "near-contract", event_version("1.0.0"))]
29 MtBurn(Cow<'a, [MtBurnEvent<'a>]>),
30 #[cfg_attr(feature = "near-contract", event_version("1.0.0"))]
31 MtTransfer(Cow<'a, [MtTransferEvent<'a>]>),
32}
33
34#[must_use = "make sure to `.emit()` this event"]
35#[cfg_attr(
36 feature = "serde",
37 cfg_eval::cfg_eval,
38 serde_with::serde_as,
39 derive(::serde::Serialize, ::serde::Deserialize),
40 cfg_attr(feature = "schemars-v0_8", derive(::schemars::JsonSchema))
41)]
42#[derive(Debug, Clone)]
43pub struct MtMintEvent<'a> {
44 pub owner_id: Cow<'a, AccountIdRef>,
45 pub token_ids: Cow<'a, [TokenId]>,
46 #[cfg_attr(feature = "serde", serde_as(as = "AsCowSlice<DisplayFromStr>"))]
47 pub amounts: Cow<'a, [u128]>,
48 #[cfg_attr(
49 feature = "serde",
50 serde(default, skip_serializing_if = "Option::is_none")
51 )]
52 pub memo: Option<Cow<'a, str>>,
53}
54
55#[must_use = "make sure to `.emit()` this event"]
56#[cfg_attr(
57 feature = "serde",
58 cfg_eval::cfg_eval,
59 serde_with::serde_as,
60 derive(::serde::Serialize, ::serde::Deserialize),
61 cfg_attr(feature = "schemars-v0_8", derive(::schemars::JsonSchema))
62)]
63#[derive(Debug, Clone)]
64pub struct MtBurnEvent<'a> {
65 pub owner_id: Cow<'a, AccountIdRef>,
66 #[cfg_attr(
67 feature = "serde",
68 serde(default, skip_serializing_if = "Option::is_none")
69 )]
70 pub authorized_id: Option<Cow<'a, AccountIdRef>>,
71 pub token_ids: Cow<'a, [TokenId]>,
72 #[cfg_attr(feature = "serde", serde_as(as = "AsCowSlice<DisplayFromStr>"))]
73 pub amounts: Cow<'a, [u128]>,
74 #[cfg_attr(
75 feature = "serde",
76 serde(default, skip_serializing_if = "Option::is_none")
77 )]
78 pub memo: Option<Cow<'a, str>>,
79}
80
81#[must_use = "make sure to `.emit()` this event"]
82#[cfg_attr(
83 feature = "serde",
84 cfg_eval::cfg_eval,
85 serde_with::serde_as,
86 derive(::serde::Serialize, ::serde::Deserialize),
87 cfg_attr(feature = "schemars-v0_8", derive(::schemars::JsonSchema))
88)]
89#[derive(Debug, Clone)]
90pub struct MtTransferEvent<'a> {
91 #[cfg_attr(
92 feature = "serde",
93 serde(default, skip_serializing_if = "Option::is_none")
94 )]
95 pub authorized_id: Option<Cow<'a, AccountIdRef>>,
96 pub old_owner_id: Cow<'a, AccountIdRef>,
97 pub new_owner_id: Cow<'a, AccountIdRef>,
98 pub token_ids: Cow<'a, [TokenId]>,
99 #[cfg_attr(feature = "serde", serde_as(as = "AsCowSlice<DisplayFromStr>"))]
100 pub amounts: Cow<'a, [u128]>,
101 #[cfg_attr(
102 feature = "serde",
103 serde(default, skip_serializing_if = "Option::is_none")
104 )]
105 pub memo: Option<Cow<'a, str>>,
106}