git.delta.rocks / unique-network / refs/commits / e4fb88351df3

difftreelog

source

pallets/rmrk-core-proxy/src/property.rs2.6 KiBsourcehistory
1use super::*;2use core::convert::AsRef;34pub enum RmrkProperty {5    Metadata,6    CollectionType,7    Recipient,8    Royalty,9    Equipped,10    Pending,11    ResourceCollection,12    ResourcePriorities,13    PendingRemoval,14    Parts,15    Base,16    Src,17    Slot,18    License,19    Thumb,20    EquippedNft,21    BaseType,22    // // RmrkPartId(/* Id type? */)23    EquippableList,24    ZIndex,25    ThemeName,26    ThemeProperty(RmrkString),27    ThemeInherit,28}2930impl RmrkProperty {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>>::RmrkPropertyIsTooLong)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::Recipient => key!("recipient"),51            Self::Royalty => key!("royalty"),52            Self::Equipped => key!("equipped"),53            Self::Pending => key!("pending"),54            Self::ResourceCollection => key!("resource-collection"),55            Self::ResourcePriorities => key!("resource-priorities"),56            Self::PendingRemoval => 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            // RmrkPartId(/* Id type? */)66            Self::EquippableList => key!("equippable-list"),67            Self::ZIndex => key!("z-index"),68            Self::ThemeName => key!("theme-name"),69            Self::ThemeProperty(name) => key!("theme-property-", name),70            Self::ThemeInherit => key!("theme-inherit"),71        }72    }73}7475#[macro_export]76macro_rules! rmrk_property {77    (Config=$cfg:ty, $key:ident: $value:expr) => {78        rmrk_property!(@$cfg, $key).map(|key| Property {79            key,80            value: $value.into()81        })82    };8384    (@$cfg:ty, $key:ident) => {85        $crate::RmrkProperty::$key.to_key::<$cfg>()86    };8788    (Config=$cfg:ty, $key:ident) => {89        PropertyScope::Rmrk.apply(rmrk_property!(@$cfg, $key)?)90            .map_err(|_| <Error<T>>::RmrkPropertyIsTooLong)91    };92}