1use super::*;2use core::convert::AsRef;34pub enum RmrkProperty<'r> {5 Metadata,6 CollectionType,7 RoyaltyInfo,8 Equipped,9 ResourceCollection,10 ResourcePriorities,11 ResourceType,12 PendingResourceAccept,13 PendingResourceRemoval,14 Parts,15 Base,16 Src,17 Slot,18 License,19 Thumb,20 EquippedNft,21 BaseType,22 ExternalPartId,23 EquippableList,24 ZIndex,25 ThemeName,26 ThemeInherit,27 UserProperty(&'r [u8]),28}2930impl<'r> RmrkProperty<'r> {31 pub fn to_key<T: Config>(self) -> Result<PropertyKey, Error<T>> {32 fn get_bytes<T: AsRef<[u8]>>(container: &T) -> &[u8] {33 container.as_ref()34 }3536 macro_rules! key {37 ($($component:expr),+) => {38 PropertyKey::try_from([$(key!(@ &$component)),+].concat())39 .map_err(|_| <Error<T>>::RmrkPropertyKeyIsTooLong)40 };4142 (@ $key:expr) => {43 get_bytes($key)44 };45 }4647 match self {48 Self::Metadata => key!("metadata"),49 Self::CollectionType => key!("collection-type"),50 Self::RoyaltyInfo => key!("royalty-info"),51 Self::Equipped => key!("equipped"),52 Self::ResourceCollection => key!("resource-collection"),53 Self::ResourcePriorities => key!("resource-priorities"),54 Self::ResourceType => key!("resource-type"),55 Self::PendingResourceAccept => key!("pending-accept"),56 Self::PendingResourceRemoval => key!("pending-removal"),57 Self::Parts => key!("parts"),58 Self::Base => key!("base"),59 Self::Src => key!("src"),60 Self::Slot => key!("slot"),61 Self::License => key!("license"),62 Self::Thumb => key!("thumb"),63 Self::EquippedNft => key!("equipped-nft"),64 Self::BaseType => key!("base-type"),65 Self::ExternalPartId => key!("ext-part-id"),66 Self::EquippableList => key!("equippable-list"),67 Self::ZIndex => key!("z-index"),68 Self::ThemeName => key!("theme-name"),69 Self::ThemeInherit => key!("theme-inherit"),70 Self::UserProperty(name) => key!("userprop-", name),71 }72 }73}