1use codec::{Decode, Encode, MaxEncodedLen};2use scale_info::TypeInfo;34use derivative::Derivative;56#[cfg(feature = "std")]7use serde::Serialize;89use primitives::*;1011pub mod primitives {12 pub type CollectionId = u32;13 pub type ResourceId = u32;14 pub type NftId = u32;15 pub type BaseId = u32;16 pub type SlotId = u32;17 pub type PartId = u32;18 pub type ZIndex = u32;19}2021#[cfg(feature = "std")]22mod serialize {23 use core::convert::AsRef;24 use serde::ser::{self, Serialize};2526 pub mod vec {27 use super::*;2829 pub fn serialize<D, V, C>(value: &C, serializer: D) -> Result<D::Ok, D::Error>30 where31 D: ser::Serializer,32 V: Serialize,33 C: AsRef<[V]>,34 {35 value.as_ref().serialize(serializer)36 }37 }3839 pub mod opt_vec {40 use super::*;4142 pub fn serialize<D, V, C>(value: &Option<C>, serializer: D) -> Result<D::Ok, D::Error>43 where44 D: ser::Serializer,45 V: Serialize,46 C: AsRef<[V]>,47 {48 match value {49 Some(value) => super::vec::serialize(value, serializer),50 None => serializer.serialize_none()51 }52 }53 }54}555657#[cfg_attr(feature = "std", derive(PartialEq, Eq, Serialize))]58#[derive(Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]59#[cfg_attr(60 feature = "std",61 serde(62 bound = r#"63 AccountId: Serialize,64 BoundedString: AsRef<[u8]>,65 BoundedSymbol: AsRef<[u8]>66 "#67 )68)]69pub struct CollectionInfo<BoundedString, BoundedSymbol, AccountId> {70 71 pub issuer: AccountId,7273 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]74 pub metadata: BoundedString,75 pub max: Option<u32>,7677 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]78 pub symbol: BoundedSymbol,79 pub nfts_count: u32,80}8182#[derive(Encode, Decode, Eq, PartialEq, Copy, Clone, Debug, TypeInfo, MaxEncodedLen)]83#[cfg_attr(feature = "std", derive(Serialize))]84pub enum AccountIdOrCollectionNftTuple<AccountId> {85 AccountId(AccountId),86 CollectionAndNftTuple(CollectionId, NftId),87}888990#[cfg_attr(feature = "std", derive(PartialEq, Eq, Serialize))]91#[derive(Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]92pub struct RoyaltyInfo<AccountId, RoyaltyAmount> {93 94 pub recipient: AccountId,95 96 pub amount: RoyaltyAmount,97}9899100#[cfg_attr(feature = "std", derive(PartialEq, Eq, Serialize))]101#[derive(Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]102#[cfg_attr(103 feature = "std",104 serde(105 bound = r#"106 AccountId: Serialize,107 RoyaltyAmount: Serialize,108 BoundedString: AsRef<[u8]>109 "#110 )111)]112pub struct NftInfo<AccountId, RoyaltyAmount, BoundedString> {113 114 pub owner: AccountIdOrCollectionNftTuple<AccountId>,115 116 pub royalty: Option<RoyaltyInfo<AccountId, RoyaltyAmount>>,117118 119 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]120 pub metadata: BoundedString,121122 123 pub equipped: bool,124 125 pub pending: bool,126}127128#[cfg_attr(feature = "std", derive(PartialEq, Eq, Serialize))]129#[derive(Encode, Decode, TypeInfo, MaxEncodedLen)]130pub struct NftChild {131 pub collection_id: CollectionId,132 pub nft_id: NftId133}134135#[cfg_attr(feature = "std", derive(Serialize))]136#[derive(Encode, Decode, PartialEq, TypeInfo)]137#[cfg_attr(138 feature = "std",139 serde(140 bound = r#"141 BoundedKey: AsRef<[u8]>,142 BoundedValue: AsRef<[u8]>143 "#144 )145)]146pub struct PropertyInfo<BoundedKey, BoundedValue>147{148 149 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]150 pub key: BoundedKey,151152 153 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]154 pub value: BoundedValue,155}156157#[derive(Encode, Decode, Eq, PartialEq, Clone, Debug, TypeInfo, MaxEncodedLen)]158#[cfg_attr(feature = "std", derive(Serialize))]159#[cfg_attr(160 feature = "std",161 serde(bound = "BoundedString: AsRef<[u8]>")162)]163pub struct BasicResource<BoundedString> {164 165 166 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]167 pub src: Option<BoundedString>,168169 170 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]171 pub metadata: Option<BoundedString>,172173 174 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]175 pub license: Option<BoundedString>,176177 178 179 180 181 182 183 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]184 pub thumb: Option<BoundedString>,185}186187#[derive(Encode, Decode, Eq, PartialEq, Clone, Debug, TypeInfo, MaxEncodedLen)]188#[cfg_attr(feature = "std", derive(Serialize))]189#[cfg_attr(190 feature = "std",191 serde(192 bound = r#"193 BoundedString: AsRef<[u8]>,194 BoundedParts: AsRef<[PartId]>195 "#196 )197)]198pub struct ComposableResource<BoundedString, BoundedParts> {199 200 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]201 pub parts: BoundedParts,202203 204 205 206 pub base: BaseId,207208 209 210 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]211 pub src: Option<BoundedString>,212213 214 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]215 pub metadata: Option<BoundedString>,216217 218 219 220 221222 223 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]224 pub license: Option<BoundedString>,225226 227 228 229 230 231 232 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]233 pub thumb: Option<BoundedString>,234}235236#[derive(Encode, Decode, Eq, PartialEq, Clone, Debug, TypeInfo, MaxEncodedLen)]237#[cfg_attr(feature = "std", derive(Serialize))]238#[cfg_attr(239 feature = "std",240 serde(bound = "BoundedString: AsRef<[u8]>")241)]242pub struct SlotResource<BoundedString> {243 244 245 246 pub base: BaseId,247248 249 250 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]251 pub src: Option<BoundedString>,252253 254 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]255 pub metadata: Option<BoundedString>,256257 258 259 260 261 pub slot: SlotId,262263 264 265 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]266 pub license: Option<BoundedString>,267268 269 270 271 272 273 274 #[cfg_attr(feature = "std", serde(with = "serialize::opt_vec"))]275 pub thumb: Option<BoundedString>,276}277278#[derive(Encode, Decode, Eq, PartialEq, Clone, Debug, TypeInfo, MaxEncodedLen)]279#[cfg_attr(feature = "std", derive(Serialize))]280#[cfg_attr(281 feature = "std",282 serde(283 bound = r#"284 BoundedString: AsRef<[u8]>,285 BoundedParts: AsRef<[PartId]>286 "#287 )288)]289pub enum ResourceTypes<BoundedString, BoundedParts> {290 Basic(BasicResource<BoundedString>),291 Composable(ComposableResource<BoundedString, BoundedParts>),292 Slot(SlotResource<BoundedString>),293}294295296#[derive(Encode, Decode, Eq, PartialEq, Clone, Debug, TypeInfo, MaxEncodedLen)]297#[cfg_attr(feature = "std", derive(Serialize))]298#[cfg_attr(299 feature = "std",300 serde(301 bound = r#"302 BoundedResource: AsRef<[u8]>,303 BoundedString: AsRef<[u8]>,304 BoundedParts: AsRef<[PartId]>305 "#306 )307)]308pub struct ResourceInfo<BoundedResource, BoundedString, BoundedParts> {309 310 311 312 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]313 pub id: BoundedResource,314315 316 pub resource: ResourceTypes<BoundedString, BoundedParts>,317318 319 pub pending: bool,320321 322 pub pending_removal: bool,323}324325#[cfg_attr(feature = "std", derive(PartialEq, Eq, Serialize))]326#[derive(Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]327#[cfg_attr(328 feature = "std",329 serde(330 bound = r#"331 AccountId: Serialize,332 BoundedString: AsRef<[u8]>333 "#334 )335)]336pub struct BaseInfo<AccountId, BoundedString> {337 338 pub issuer: AccountId,339340 341 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]342 pub base_type: BoundedString,343344 345 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]346 pub symbol: BoundedString,347}348349#[cfg_attr(feature = "std", derive(Serialize))]350#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq, Eq, MaxEncodedLen)]351#[cfg_attr(352 feature = "std",353 serde(bound = "BoundedString: AsRef<[u8]>")354)]355pub struct FixedPart<BoundedString> {356 pub id: PartId,357 pub z: ZIndex,358359 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]360 pub src: BoundedString,361}362363#[cfg_attr(feature = "std", derive(Serialize))]364#[derive(Encode, Decode, Debug, Derivative, TypeInfo, Clone, PartialEq, Eq, MaxEncodedLen)]365#[cfg_attr(366 feature = "std",367 serde(bound = "BoundedCollectionList: AsRef<[CollectionId]>")368)]369#[derivative(Default(bound=""))]370pub enum EquippableList<BoundedCollectionList> {371 All,372373 #[derivative(Default)]374 Empty,375376 Custom(377 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]378 BoundedCollectionList379 ),380}381382#[cfg_attr(feature = "std", derive(Serialize))]383#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq, Eq, MaxEncodedLen)]384#[cfg_attr(385 feature = "std",386 serde(387 bound = r#"388 BoundedString: AsRef<[u8]>,389 BoundedCollectionList: AsRef<[CollectionId]>390 "#391 )392)]393pub struct SlotPart<BoundedString, BoundedCollectionList> {394 pub id: PartId,395 pub equippable: EquippableList<BoundedCollectionList>,396397 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]398 pub src: BoundedString,399400 pub z: ZIndex,401}402403#[cfg_attr(feature = "std", derive(Serialize))]404#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq, Eq, MaxEncodedLen)]405#[cfg_attr(406 feature = "std",407 serde(408 bound = r#"409 BoundedString: AsRef<[u8]>,410 BoundedCollectionList: AsRef<[CollectionId]>411 "#412 )413)]414pub enum PartType<BoundedString, BoundedCollectionList> {415 FixedPart(FixedPart<BoundedString>),416 SlotPart(SlotPart<BoundedString, BoundedCollectionList>),417}418419#[cfg_attr(feature = "std", derive(Eq, Serialize))]420#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq)]421#[cfg_attr(422 feature = "std",423 serde(424 bound = r#"425 BoundedString: AsRef<[u8]>,426 PropertyList: AsRef<[ThemeProperty<BoundedString>]>,427 "#428 )429)]430pub struct Theme<BoundedString, PropertyList> {431 432 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]433 pub name: BoundedString,434435 436 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]437 pub properties: PropertyList,438 439 pub inherit: bool,440}441442#[cfg_attr(feature = "std", derive(Eq, Serialize))]443#[derive(Encode, Decode, Debug, TypeInfo, Clone, PartialEq)]444#[cfg_attr(445 feature = "std",446 serde(bound = "BoundedString: AsRef<[u8]>")447)]448pub struct ThemeProperty<BoundedString> {449 450 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]451 pub key: BoundedString,452453 454 #[cfg_attr(feature = "std", serde(with = "serialize::vec"))]455 pub value: BoundedString,456}