1use super::*;
21use frame_support::{
22 pallet_prelude::{BoundedVec, MaxEncodedLen},
23 traits::Get,
24};
25use scale_info::TypeInfo;
26
27pub type DepositBalanceOf<T, I = ()> =
29 <<T as Config<I>>::Currency as Currency<<T as SystemConfig>::AccountId>>::Balance;
30pub type CollectionDetailsFor<T, I> =
32 CollectionDetails<<T as SystemConfig>::AccountId, DepositBalanceOf<T, I>>;
33pub type ItemDetailsFor<T, I> = ItemDetails<<T as SystemConfig>::AccountId, DepositBalanceOf<T, I>>;
35pub type ItemPrice<T, I = ()> =
37 <<T as Config<I>>::Currency as Currency<<T as SystemConfig>::AccountId>>::Balance;
38
39#[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)]
40pub struct CollectionDetails<AccountId, DepositBalance> {
41 pub owner: AccountId,
43 pub issuer: AccountId,
45 pub admin: AccountId,
47 pub freezer: AccountId,
49 pub total_deposit: DepositBalance,
52 pub free_holding: bool,
54 pub items: u32,
56 pub item_metadatas: u32,
58 pub attributes: u32,
60 pub is_frozen: bool,
62}
63
64#[derive(
66 Copy,
67 Clone,
68 Encode,
69 Decode,
70 DecodeWithMemTracking,
71 Eq,
72 PartialEq,
73 RuntimeDebug,
74 TypeInfo,
75 MaxEncodedLen,
76)]
77pub struct DestroyWitness {
78 #[codec(compact)]
80 pub items: u32,
81 #[codec(compact)]
83 pub item_metadatas: u32,
84 #[codec(compact)]
85 pub attributes: u32,
87}
88
89impl<AccountId, DepositBalance> CollectionDetails<AccountId, DepositBalance> {
90 pub fn destroy_witness(&self) -> DestroyWitness {
91 DestroyWitness {
92 items: self.items,
93 item_metadatas: self.item_metadatas,
94 attributes: self.attributes,
95 }
96 }
97}
98
99#[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, Default, TypeInfo, MaxEncodedLen)]
101pub struct ItemDetails<AccountId, DepositBalance> {
102 pub owner: AccountId,
104 pub approved: Option<AccountId>,
106 pub is_frozen: bool,
108 pub deposit: DepositBalance,
111}
112
113#[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, Default, TypeInfo, MaxEncodedLen)]
114#[scale_info(skip_type_params(StringLimit))]
115#[codec(mel_bound(DepositBalance: MaxEncodedLen))]
116pub struct CollectionMetadata<DepositBalance, StringLimit: Get<u32>> {
117 pub deposit: DepositBalance,
121 pub data: BoundedVec<u8, StringLimit>,
125 pub is_frozen: bool,
127}
128
129#[derive(Clone, Encode, Decode, Eq, PartialEq, RuntimeDebug, Default, TypeInfo, MaxEncodedLen)]
130#[scale_info(skip_type_params(StringLimit))]
131#[codec(mel_bound(DepositBalance: MaxEncodedLen))]
132pub struct ItemMetadata<DepositBalance, StringLimit: Get<u32>> {
133 pub deposit: DepositBalance,
137 pub data: BoundedVec<u8, StringLimit>,
141 pub is_frozen: bool,
143}
144
145pub mod asset_strategies {
146 use super::*;
147 use frame_support::traits::tokens::asset_ops::common_strategies::{
148 Admin, ConfigValue, Owner, PredefinedId, WithConfig,
149 };
150
151 pub struct Attribute<'a>(pub &'a [u8]);
152
153 pub type CollectionManagers<AccountId> =
154 (ConfigValue<Owner<AccountId>>, ConfigValue<Admin<AccountId>>);
155
156 pub type WithCollectionConfig<T, I = ()> = WithConfig<
157 CollectionManagers<<T as frame_system::Config>::AccountId>,
158 PredefinedId<<T as Config<I>>::CollectionId>,
159 >;
160
161 pub type WithItemConfig<T, I = ()> = WithConfig<
162 ConfigValue<Owner<<T as frame_system::Config>::AccountId>>,
163 PredefinedId<(<T as Config<I>>::CollectionId, <T as Config<I>>::ItemId)>,
164 >;
165}