odra_modules/cep78/
settings.rs

1use odra::{named_keys::single_value_storage, prelude::*};
2
3use super::constants::*;
4use super::error::CEP78Error;
5use super::modalities::{BurnMode, EventsMode, MintingMode, NFTHolderMode, NFTKind, OwnershipMode};
6
7single_value_storage!(Cep78AllowMinting, bool, ALLOW_MINTING);
8single_value_storage!(
9    Cep78MintingMode,
10    MintingMode,
11    MINTING_MODE,
12    CEP78Error::MissingMintingMode
13);
14single_value_storage!(
15    Cep78OwnershipMode,
16    OwnershipMode,
17    OWNERSHIP_MODE,
18    CEP78Error::MissingOwnershipMode
19);
20single_value_storage!(Cep78NFTKind, NFTKind, NFT_KIND, CEP78Error::MissingNftKind);
21single_value_storage!(
22    Cep78HolderMode,
23    NFTHolderMode,
24    HOLDER_MODE,
25    CEP78Error::MissingHolderMode
26);
27single_value_storage!(
28    Cep78BurnMode,
29    BurnMode,
30    BURN_MODE,
31    CEP78Error::MissingBurnMode
32);
33single_value_storage!(
34    Cep78EventsMode,
35    EventsMode,
36    EVENTS_MODE,
37    CEP78Error::MissingEventsMode
38);
39single_value_storage!(
40    Cep78OperatorBurnMode,
41    bool,
42    OPERATOR_BURN_MODE,
43    CEP78Error::MissingOperatorBurnMode
44);
45
46#[odra::module]
47pub struct Settings {
48    allow_minting: SubModule<Cep78AllowMinting>,
49    minting_mode: SubModule<Cep78MintingMode>,
50    ownership_mode: SubModule<Cep78OwnershipMode>,
51    nft_kind: SubModule<Cep78NFTKind>,
52    holder_mode: SubModule<Cep78HolderMode>,
53    burn_mode: SubModule<Cep78BurnMode>,
54    events_mode: SubModule<Cep78EventsMode>,
55    operator_burn_mode: SubModule<Cep78OperatorBurnMode>
56}
57
58impl Settings {
59    #[allow(clippy::too_many_arguments)]
60    pub fn init(
61        &mut self,
62        allow_minting: bool,
63        minting_mode: MintingMode,
64        ownership_mode: OwnershipMode,
65        nft_kind: NFTKind,
66        holder_mode: NFTHolderMode,
67        burn_mode: BurnMode,
68        events_mode: EventsMode,
69        operator_burn_mode: bool
70    ) {
71        self.allow_minting.set(allow_minting);
72        self.minting_mode.set(minting_mode);
73        self.ownership_mode.set(ownership_mode);
74        self.nft_kind.set(nft_kind);
75        self.holder_mode.set(holder_mode);
76        self.burn_mode.set(burn_mode);
77        self.events_mode.set(events_mode);
78        self.operator_burn_mode.set(operator_burn_mode);
79    }
80
81    #[inline]
82    pub fn allow_minting(&self) -> bool {
83        self.allow_minting.get().unwrap_or_default()
84    }
85
86    #[inline]
87    pub fn set_allow_minting(&mut self, value: bool) {
88        self.allow_minting.set(value)
89    }
90
91    #[inline]
92    pub fn events_mode(&self) -> EventsMode {
93        self.events_mode.get()
94    }
95
96    #[inline]
97    pub fn burn_mode(&self) -> BurnMode {
98        self.burn_mode.get()
99    }
100
101    #[inline]
102    pub fn ownership_mode(&self) -> OwnershipMode {
103        self.ownership_mode.get()
104    }
105
106    #[inline]
107    pub fn minting_mode(&self) -> MintingMode {
108        self.minting_mode.get()
109    }
110
111    #[inline]
112    pub fn holder_mode(&self) -> NFTHolderMode {
113        self.holder_mode.get()
114    }
115
116    #[inline]
117    pub fn operator_burn_mode(&self) -> bool {
118        self.operator_burn_mode.get()
119    }
120
121    #[inline]
122    pub fn nft_kind(&self) -> NFTKind {
123        self.nft_kind.get()
124    }
125
126    #[inline]
127    pub fn set_operator_burn_mode(&mut self, value: bool) {
128        self.operator_burn_mode.set(value)
129    }
130}