1use codec::{Decode, Encode, MaxEncodedLen};2use scale_info::TypeInfo;345#[cfg(feature = "std")]6use serde::Serialize;78use primitives::*;910pub mod primitives {11 pub type CollectionId = u32;12 pub type ResourceId = u32;13 pub type NftId = u32;14 pub type BaseId = u32;15 pub type SlotId = u32;16 pub type PartId = u32;17 pub type ZIndex = u32;18}1920#[cfg(feature = "std")]21mod serialize {22 use core::convert::AsRef;23 use serde::ser::{self, Serialize};2425 pub mod vec {26 use super::*;2728 pub fn serialize<D, V, C>(value: &C, serializer: D) -> Result<D::Ok, D::Error>29 where30 D: ser::Serializer,31 V: Serialize,32 C: AsRef<[V]>,33 {34 value.as_ref().serialize(serializer)35 }36 }3738 pub mod opt_vec {39 use super::*;4041 pub fn serialize<D, V, C>(value: &Option<C>, serializer: D) -> Result<D::Ok, D::Error>42 where43 D: ser::Serializer,44 V: Serialize,45 C: AsRef<[V]>,46 {47 match value {48 Some(value) => super::vec::serialize(value, serializer),49 None => serializer.serialize_none()50 }51 }52 }53}545556#[cfg_attr(feature = "std", derive(PartialEq, Eq, Serialize))]57#[derive(Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]58#[cfg_attr(59 feature = "std",60 serde(61 bound = r#"62 AccountId: Serialize,63 BoundedString: AsRef<[u8]>,64 BoundedSymbol: AsRef<[u8]>65 "#66 )67)]68pub struct CollectionInfo<BoundedString, BoundedSymbol, AccountId> {69 70 pub issuer: AccountId,7172 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]73 pub metadata: BoundedString,74 pub max: Option<u32>,7576 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]77 pub symbol: BoundedSymbol,78 pub nfts_count: u32,79}8081#[derive(Encode, Decode, Eq, PartialEq, Copy, Clone, Debug, TypeInfo, MaxEncodedLen)]82#[cfg_attr(feature = "std", derive(Serialize))]83pub enum AccountIdOrCollectionNftTuple<AccountId> {84 AccountId(AccountId),85 CollectionAndNftTuple(CollectionId, NftId),86}878889#[cfg_attr(feature = "std", derive(PartialEq, Eq, Serialize))]90#[derive(Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]91pub struct RoyaltyInfo<AccountId, RoyaltyAmount> {92 93 pub recipient: AccountId,94 95 pub amount: RoyaltyAmount,96}979899#[cfg_attr(feature = "std", derive(PartialEq, Eq, Serialize))]100#[derive(Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]101#[cfg_attr(102 feature = "std",103 serde(104 bound = r#"105 AccountId: Serialize,106 RoyaltyAmount: Serialize,107 BoundedString: AsRef<[u8]>108 "#109 )110)]111pub struct NftInfo<AccountId, RoyaltyAmount, BoundedString> {112 113 pub owner: AccountIdOrCollectionNftTuple<AccountId>,114 115 pub royalty: Option<RoyaltyInfo<AccountId, RoyaltyAmount>>,116117 118 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]119 pub metadata: BoundedString,120121 122 pub equipped: bool,123 124 pub pending: bool,125}126127#[cfg_attr(feature = "std", derive(PartialEq, Eq, Serialize))]128#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)]129pub struct NftChild {130 pub collection_id: CollectionId,131 pub nft_id: NftId132}133134#[cfg_attr(feature = "std", derive(Serialize))]135#[derive(Encode, Decode, PartialEq, TypeInfo)]136#[cfg_attr(137 feature = "std",138 serde(139 bound = r#"140 BoundedKey: AsRef<[u8]>,141 BoundedValue: AsRef<[u8]>142 "#143 )144)]145pub struct PropertyInfo<BoundedKey, BoundedValue>146{147 148 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]149 pub key: BoundedKey,150151 152 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]153 pub value: BoundedValue,154}155156#[derive(Encode, Decode, Eq, PartialEq, Clone, Debug, TypeInfo, MaxEncodedLen)]157#[cfg_attr(feature = "std", derive(Serialize))]158#[cfg_attr(159 feature = "std",160 serde(bound = "BoundedString: AsRef<[u8]>")161)]162pub struct BasicResource<BoundedString> {163 164 165 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]166 pub src: Option<BoundedString>,167168 169 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]170 pub metadata: Option<BoundedString>,171172 173 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]174 pub license: Option<BoundedString>,175176 177 178 179 180 181 182 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]183 pub thumb: Option<BoundedString>,184}185186#[derive(Encode, Decode, Eq, PartialEq, Clone, Debug, TypeInfo, MaxEncodedLen)]187#[cfg_attr(feature = "std", derive(Serialize))]188#[cfg_attr(189 feature = "std",190 serde(191 bound = r#"192 BoundedString: AsRef<[u8]>,193 BoundedParts: AsRef<[PartId]>194 "#195 )196)]197pub struct ComposableResource<BoundedString, BoundedParts> {198 199 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]200 pub parts: BoundedParts,201202 203 204 205 pub base: BaseId,206207 208 209 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]210 pub src: Option<BoundedString>,211212 213 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]214 pub metadata: Option<BoundedString>,215216 217 218 219 220221 222 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]223 pub license: Option<BoundedString>,224225 226 227 228 229 230 231 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]232 pub thumb: Option<BoundedString>,233}234235#[derive(Encode, Decode, Eq, PartialEq, Clone, Debug, TypeInfo, MaxEncodedLen)]236#[cfg_attr(feature = "std", derive(Serialize))]237#[cfg_attr(238 feature = "std",239 serde(bound = "BoundedString: AsRef<[u8]>")240)]241pub struct SlotResource<BoundedString> {242 243 244 245 pub base: BaseId,246247 248 249 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]250 pub src: Option<BoundedString>,251252 253 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]254 pub metadata: Option<BoundedString>,255256 257 258 259 260 pub slot: SlotId,261262 263 264 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]265 pub license: Option<BoundedString>,266267 268 269 270 271 272 273 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]274 pub thumb: Option<BoundedString>,275}276277#[derive(Encode, Decode, Eq, PartialEq, Clone, Debug, TypeInfo, MaxEncodedLen)]278#[cfg_attr(feature = "std", derive(Serialize))]279#[cfg_attr(280 feature = "std",281 serde(282 bound = r#"283 BoundedString: AsRef<[u8]>,284 BoundedParts: AsRef<[PartId]>285 "#286 )287)]288pub enum ResourceTypes<BoundedString, BoundedParts> {289 Basic(BasicResource<BoundedString>),290 Composable(ComposableResource<BoundedString, BoundedParts>),291 Slot(SlotResource<BoundedString>),292}293294295#[derive(Encode, Decode, Eq, PartialEq, Clone, Debug, TypeInfo, MaxEncodedLen)]296#[cfg_attr(feature = "std", derive(Serialize))]297#[cfg_attr(298 feature = "std",299 serde(300 bound = r#"301 BoundedResource: AsRef<[u8]>,302 BoundedString: AsRef<[u8]>,303 BoundedParts: AsRef<[PartId]>304 "#305 )306)]307pub struct ResourceInfo<BoundedResource, BoundedString, BoundedParts> {308 309 310 311 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]312 pub id: BoundedResource,313314 315 pub resource: ResourceTypes<BoundedString, BoundedParts>,316317 318 pub pending: bool,319320 321 pub pending_removal: bool,322}323324#[cfg_attr(feature = "std", derive(PartialEq, Eq, Serialize))]325#[derive(Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]326#[cfg_attr(327 feature = "std",328 serde(329 bound = r#"330 AccountId: Serialize,331 BoundedString: AsRef<[u8]>332 "#333 )334)]335pub struct BaseInfo<AccountId, BoundedString> {336 337 pub issuer: AccountId,338339 340 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]341 pub base_type: BoundedString,342343 344 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]345 pub symbol: BoundedString,346}347348#[cfg_attr(feature = "std", derive(Serialize))]349#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq, Eq, MaxEncodedLen)]350#[cfg_attr(351 feature = "std",352 serde(bound = "BoundedString: AsRef<[u8]>")353)]354pub struct FixedPart<BoundedString> {355 pub id: PartId,356 pub z: ZIndex,357358 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]359 pub src: BoundedString,360}361362#[cfg_attr(feature = "std", derive(Serialize))]363#[derive(Encode, Decode, Debug, Default, TypeInfo, Clone, PartialEq, Eq, MaxEncodedLen)]364#[cfg_attr(365 feature = "std",366 serde(bound = "BoundedCollectionList: AsRef<[CollectionId]>")367)]368pub enum EquippableList<BoundedCollectionList> {369 All,370 #[default] Empty,371 Custom(372 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]373 BoundedCollectionList374 ),375}376377#[cfg_attr(feature = "std", derive(Serialize))]378#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq, Eq, MaxEncodedLen)]379#[cfg_attr(380 feature = "std",381 serde(382 bound = r#"383 BoundedString: AsRef<[u8]>,384 BoundedCollectionList: AsRef<[CollectionId]>385 "#386 )387)]388pub struct SlotPart<BoundedString, BoundedCollectionList> {389 pub id: PartId,390 pub equippable: EquippableList<BoundedCollectionList>,391392 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]393 pub src: BoundedString,394395 pub z: ZIndex,396}397398#[cfg_attr(feature = "std", derive(Serialize))]399#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq, Eq, MaxEncodedLen)]400#[cfg_attr(401 feature = "std",402 serde(403 bound = r#"404 BoundedString: AsRef<[u8]>,405 BoundedCollectionList: AsRef<[CollectionId]>406 "#407 )408)]409pub enum PartType<BoundedString, BoundedCollectionList> {410 FixedPart(FixedPart<BoundedString>),411 SlotPart(SlotPart<BoundedString, BoundedCollectionList>),412}413414#[cfg_attr(feature = "std", derive(Eq, Serialize))]415#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq)]416#[cfg_attr(417 feature = "std",418 serde(419 bound = r#"420 BoundedString: AsRef<[u8]>,421 PropertyList: AsRef<[ThemeProperty<BoundedString>]>,422 "#423 )424)]425pub struct Theme<BoundedString, PropertyList> {426 427 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]428 pub name: BoundedString,429430 431 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]432 pub properties: PropertyList,433 434 pub inherit: bool,435}436437#[cfg_attr(feature = "std", derive(Eq, Serialize))]438#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq)]439#[cfg_attr(440 feature = "std",441 serde(bound = "BoundedString: AsRef<[u8]>")442)]443pub struct ThemeProperty<BoundedString> {444 445 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]446 pub key: BoundedString,447448 449 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]450 pub value: BoundedString,451}