difftreelog
feat add properties scopes
in: master
3 files changed
pallets/common/src/lib.rsdiffbeforeafterboth--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -37,7 +37,7 @@
CUSTOM_DATA_LIMIT, CollectionLimits, CreateCollectionData, SponsorshipState, CreateItemExData,
SponsoringRateLimit, budget::Budget, COLLECTION_FIELD_LIMIT, CollectionField, PhantomType,
Property, Properties, PropertiesPermissionMap, PropertyKey, PropertyPermission,
- PropertiesError, PropertyKeyPermission, TokenData, TrySet,
+ PropertiesError, PropertyKeyPermission, TokenData, TrySetProperty,
};
pub use pallet::*;
use sp_core::H160;
@@ -346,8 +346,8 @@
/// Tried to store more property keys than allowed
PropertyLimitReached,
- /// Unable to read array of unbounded keys
- UnableToReadUnboundedKeys,
+ /// Property key is too long
+ PropertyKeyIsTooLong,
/// Only ASCII letters, digits, and '_', '-' are allowed
InvalidCharacterInPropertyKey,
@@ -838,7 +838,7 @@
keys.into_iter()
.map(|key| -> Result<PropertyKey, DispatchError> {
key.try_into()
- .map_err(|_| <Error<T>>::UnableToReadUnboundedKeys.into())
+ .map_err(|_| <Error<T>>::PropertyKeyIsTooLong.into())
})
.collect::<Result<Vec<PropertyKey>, DispatchError>>()
}
@@ -1181,6 +1181,7 @@
PropertiesError::NoSpaceForProperty => Self::NoSpaceForProperty,
PropertiesError::PropertyLimitReached => Self::PropertyLimitReached,
PropertiesError::InvalidCharacterInPropertyKey => Self::InvalidCharacterInPropertyKey,
+ PropertiesError::PropertyKeyIsTooLong => Self::PropertyKeyIsTooLong,
PropertiesError::EmptyPropertyKey => Self::EmptyPropertyKey,
}
}
pallets/nonfungible/src/lib.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -22,7 +22,7 @@
use up_data_structs::{
AccessMode, CollectionId, CustomDataLimit, TokenId, CreateCollectionData, CreateNftExData,
mapping::TokenAddressMapping, NestingRule, budget::Budget, Property, PropertyPermission,
- PropertyKey, PropertyKeyPermission, Properties, TrySet,
+ PropertyKey, PropertyKeyPermission, Properties, TrySetProperty,
};
use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm};
use pallet_common::{
primitives/data-structs/src/lib.rsdiffbeforeafterboth649 NoSpaceForProperty,649 NoSpaceForProperty,650 PropertyLimitReached,650 PropertyLimitReached,651 InvalidCharacterInPropertyKey,651 InvalidCharacterInPropertyKey,652 PropertyKeyIsTooLong,652 EmptyPropertyKey,653 EmptyPropertyKey,653}654}655656#[derive(Clone, Copy)]657pub enum PropertyScope {658 None,659 Rmrk,660}661662impl PropertyScope {663 fn apply(self, key: PropertyKey) -> Result<PropertyKey, PropertiesError> {664 let scope_str: &[u8] = match self {665 Self::None => return Ok(key),666 Self::Rmrk => b"rmrk",667 };668669 [scope_str, b":", key.as_slice()]670 .concat()671 .try_into()672 .map_err(|_| PropertiesError::PropertyKeyIsTooLong)673 }674}654675655pub trait TrySet: Sized {676pub trait TrySetProperty: Sized {656 type Value;677 type Value;657678658 fn try_set(&mut self, key: PropertyKey, value: Self::Value) -> Result<(), PropertiesError>;679 fn try_scoped_set(680 &mut self,681 scope: PropertyScope,682 key: PropertyKey,683 value: Self::Value684 ) -> Result<(), PropertiesError>;659685660 fn try_set_from_iter<I>(&mut self, iter: I) -> Result<(), PropertiesError>686 fn try_scoped_set_from_iter<I>(687 &mut self,688 scope: PropertyScope,689 iter: I690 ) -> Result<(), PropertiesError>661 where691 where662 I: Iterator<Item = (PropertyKey, Self::Value)>,692 I: Iterator<Item=(PropertyKey, Self::Value)>663 {693 {664 for (key, value) in iter {694 for (key, value) in iter {665 self.try_set(key, value)?;695 self.try_scoped_set(scope, key, value)?;666 }696 }667697668 Ok(())698 Ok(())669 }699 }700701 fn try_set(&mut self, key: PropertyKey, value: Self::Value) -> Result<(), PropertiesError> {702 self.try_scoped_set(PropertyScope::None, key, value)703 }704705 fn try_set_from_iter<I>(&mut self, iter: I) -> Result<(), PropertiesError>706 where707 I: Iterator<Item = (PropertyKey, Self::Value)>,708 {709 self.try_scoped_set_from_iter(PropertyScope::None, iter)710 }670}711}671712672#[derive(Encode, Decode, TypeInfo, Derivative, Clone, PartialEq, MaxEncodedLen)]713#[derive(Encode, Decode, TypeInfo, Derivative, Clone, PartialEq, MaxEncodedLen)]713 }754 }714}755}715756716impl<Value> TrySet for PropertiesMap<Value> {757impl<Value> TrySetProperty for PropertiesMap<Value> {717 type Value = Value;758 type Value = Value;718759719 fn try_set(&mut self, key: PropertyKey, value: Self::Value) -> Result<(), PropertiesError> {760 fn try_scoped_set(761 &mut self,762 scope: PropertyScope,763 key: PropertyKey,764 value: Self::Value765 ) -> Result<(), PropertiesError> {720 Self::check_property_key(&key)?;766 Self::check_property_key(&key)?;721767768 let key = scope.apply(key)?;722 self.0769 self.0723 .try_insert(key, value)770 .try_insert(key, value)724 .map_err(|_| PropertiesError::PropertyLimitReached)?;771 .map_err(|_| PropertiesError::PropertyLimitReached)?;765 }812 }766}813}767814768impl TrySet for Properties {815impl TrySetProperty for Properties {769 type Value = PropertyValue;816 type Value = PropertyValue;770817771 fn try_set(&mut self, key: PropertyKey, value: Self::Value) -> Result<(), PropertiesError> {818 fn try_scoped_set(819 &mut self,820 scope: PropertyScope,821 key: PropertyKey,822 value: Self::Value823 ) -> Result<(), PropertiesError> {775 return Err(PropertiesError::NoSpaceForProperty);827 return Err(PropertiesError::NoSpaceForProperty);776 }828 }777829778 self.map.try_set(key, value)?;830 self.map.try_scoped_set(scope, key, value)?;779831780 self.consumed_space += value_len as u32;832 self.consumed_space += value_len as u32;781833