difftreelog
fix property keys are optional in RPC
in: master
7 files changed
client/rpc/src/lib.rsdiffbeforeafterboth76 fn collection_properties(76 fn collection_properties(77 &self,77 &self,78 collection: CollectionId,78 collection: CollectionId,79 keys: Vec<String>,79 keys: Option<Vec<String>>,80 at: Option<BlockHash>,80 at: Option<BlockHash>,81 ) -> Result<Vec<Property>>;81 ) -> Result<Vec<Property>>;828285 &self,85 &self,86 collection: CollectionId,86 collection: CollectionId,87 token_id: TokenId,87 token_id: TokenId,88 properties: Vec<String>,88 keys: Option<Vec<String>>,89 at: Option<BlockHash>,89 at: Option<BlockHash>,90 ) -> Result<Vec<Property>>;90 ) -> Result<Vec<Property>>;919192 #[rpc(name = "unique_propertyPermissions")]92 #[rpc(name = "unique_propertyPermissions")]93 fn property_permissions(93 fn property_permissions(94 &self,94 &self,95 collection: CollectionId,95 collection: CollectionId,96 keys: Vec<String>,96 keys: Option<Vec<String>>,97 at: Option<BlockHash>,97 at: Option<BlockHash>,98 ) -> Result<Vec<PropertyKeyPermission>>;98 ) -> Result<Vec<PropertyKeyPermission>>;9999102 &self,102 &self,103 collection: CollectionId,103 collection: CollectionId,104 token_id: TokenId,104 token_id: TokenId,105 keys: Vec<String>,105 keys: Option<Vec<String>>,106 at: Option<BlockHash>,106 at: Option<BlockHash>,107 ) -> Result<TokenData<CrossAccountId>>;107 ) -> Result<TokenData<CrossAccountId>>;108108277 collection: CollectionId,277 collection: CollectionId,278278279 #[map(|keys| string_keys_to_bytes_keys(keys))]279 #[map(|keys| string_keys_to_bytes_keys(keys))]280 keys: Vec<String>280 keys: Option<Vec<String>>281 ) -> Vec<Property>);281 ) -> Vec<Property>);282282283 pass_method!(token_properties(283 pass_method!(token_properties(284 collection: CollectionId,284 collection: CollectionId,285 token_id: TokenId,285 token_id: TokenId,286286287 #[map(|keys| string_keys_to_bytes_keys(keys))]287 #[map(|keys| string_keys_to_bytes_keys(keys))]288 properties: Vec<String>288 keys: Option<Vec<String>>289 ) -> Vec<Property>);289 ) -> Vec<Property>);290290291 pass_method!(property_permissions(291 pass_method!(property_permissions(292 collection: CollectionId,292 collection: CollectionId,293293294 #[map(|keys| string_keys_to_bytes_keys(keys))]294 #[map(|keys| string_keys_to_bytes_keys(keys))]295 keys: Vec<String>295 keys: Option<Vec<String>>296 ) -> Vec<PropertyKeyPermission>);296 ) -> Vec<PropertyKeyPermission>);297297298 pass_method!(token_data(298 pass_method!(token_data(299 collection: CollectionId,299 collection: CollectionId,300 token_id: TokenId,300 token_id: TokenId,301301302 #[map(|keys| string_keys_to_bytes_keys(keys))]302 #[map(|keys| string_keys_to_bytes_keys(keys))]303 keys: Vec<String>,303 keys: Option<Vec<String>>,304 ) -> TokenData<CrossAccountId>);304 ) -> TokenData<CrossAccountId>);305305306 pass_method!(total_supply(collection: CollectionId) -> u32);306 pass_method!(total_supply(collection: CollectionId) -> u32);318 pass_method!(effective_collection_limits(collection_id: CollectionId) -> Option<CollectionLimits>);318 pass_method!(effective_collection_limits(collection_id: CollectionId) -> Option<CollectionLimits>);319}319}320320321fn string_keys_to_bytes_keys(keys: Vec<String>) -> Vec<Vec<u8>> {321fn string_keys_to_bytes_keys(keys: Option<Vec<String>>) -> Option<Vec<Vec<u8>>> {322 keys.map(|keys| {322 keys.into_iter().map(|key| key.into_bytes()).collect()323 keys.into_iter().map(|key| key.into_bytes()).collect()323}324 })325}324326pallets/common/src/lib.rsdiffbeforeafterboth845845846 pub fn filter_collection_properties(846 pub fn filter_collection_properties(847 collection_id: CollectionId,847 collection_id: CollectionId,848 keys: Vec<PropertyKey>,848 keys: Option<Vec<PropertyKey>>,849 ) -> Result<Vec<Property>, DispatchError> {849 ) -> Result<Vec<Property>, DispatchError> {850 let properties = Self::collection_properties(collection_id);850 let properties = Self::collection_properties(collection_id);851851852 let properties = keys852 let properties = keys.map(|keys| {853 .into_iter()853 keys.into_iter()854 .filter_map(|key| {854 .filter_map(|key| {855 properties.get(&key).map(|value| Property {855 properties.get(&key).map(|value| Property {858 })858 })859 })859 })860 .collect();860 .collect()861 }).unwrap_or(862 properties.iter()863 .map(|(key, value)| Property {864 key: key.clone(),865 value: value.clone(),866 })867 .collect()868 );861869862 Ok(properties)870 Ok(properties)863 }871 }864872865 pub fn filter_property_permissions(873 pub fn filter_property_permissions(866 collection_id: CollectionId,874 collection_id: CollectionId,867 keys: Vec<PropertyKey>,875 keys: Option<Vec<PropertyKey>>,868 ) -> Result<Vec<PropertyKeyPermission>, DispatchError> {876 ) -> Result<Vec<PropertyKeyPermission>, DispatchError> {869 let permissions = Self::property_permissions(collection_id);877 let permissions = Self::property_permissions(collection_id);870878871 let key_permissions = keys879 let key_permissions = keys.map(|keys| {872 .into_iter()880 keys.into_iter()873 .filter_map(|key| {881 .filter_map(|key| {874 permissions882 permissions879 })887 })880 })888 })881 .collect();889 .collect()890 }).unwrap_or(891 permissions.iter()892 .map(|(key, permission)| PropertyKeyPermission {893 key: key.clone(),894 permission: permission.clone(),895 })896 .collect()897 );882898883 Ok(key_permissions)899 Ok(key_permissions)884 }900 }114811641149 fn token_owner(&self, token: TokenId) -> Option<T::CrossAccountId>;1165 fn token_owner(&self, token: TokenId) -> Option<T::CrossAccountId>;1150 fn const_metadata(&self, token: TokenId) -> Vec<u8>;1166 fn const_metadata(&self, token: TokenId) -> Vec<u8>;1151 fn token_properties(&self, token_id: TokenId, keys: Vec<PropertyKey>) -> Vec<Property>;1167 fn token_properties(&self, token_id: TokenId, keys: Option<Vec<PropertyKey>>) -> Vec<Property>;1152 /// Amount of unique collection tokens1168 /// Amount of unique collection tokens1153 fn total_supply(&self) -> u32;1169 fn total_supply(&self) -> u32;1154 /// Amount of different tokens account has (Applicable to nonfungible/refungible)1170 /// Amount of different tokens account has (Applicable to nonfungible/refungible)pallets/fungible/src/common.rsdiffbeforeafterboth319 Vec::new()319 Vec::new()320 }320 }321321322 fn token_properties(&self, _token_id: TokenId, _keys: Vec<PropertyKey>) -> Vec<Property> {322 fn token_properties(&self, _token_id: TokenId, _keys: Option<Vec<PropertyKey>>) -> Vec<Property> {323 Vec::new()323 Vec::new()324 }324 }325325pallets/nonfungible/src/common.rsdiffbeforeafterboth362 .into_inner()362 .into_inner()363 }363 }364364365 fn token_properties(&self, token_id: TokenId, keys: Vec<PropertyKey>) -> Vec<Property> {365 fn token_properties(&self, token_id: TokenId, keys: Option<Vec<PropertyKey>>) -> Vec<Property> {366 let properties = <Pallet<T>>::token_properties((self.id, token_id));366 let properties = <Pallet<T>>::token_properties((self.id, token_id));367367368 keys.map(|keys| {368 keys.into_iter()369 keys.into_iter()369 .filter_map(|key| {370 .filter_map(|key| {370 properties.get(&key).map(|value| Property {371 properties.get(&key).map(|value| Property {373 })374 })374 })375 })375 .collect()376 .collect()377 }).unwrap_or(378 properties.iter().map(|(key, value)| Property {379 key: key.clone(),380 value: value.clone(),381 })382 .collect()383 )376 }384 }377385378 fn total_supply(&self) -> u32 {386 fn total_supply(&self) -> u32 {pallets/refungible/src/common.rsdiffbeforeafterboth340 .into_inner()340 .into_inner()341 }341 }342342343 fn token_properties(&self, _token_id: TokenId, _keys: Vec<PropertyKey>) -> Vec<Property> {343 fn token_properties(&self, _token_id: TokenId, _keys: Option<Vec<PropertyKey>>) -> Vec<Property> {344 Vec::new()344 Vec::new()345 }345 }346346primitives/rpc/src/lib.rsdiffbeforeafterboth43 fn topmost_token_owner(collection: CollectionId, token: TokenId) -> Result<Option<CrossAccountId>>;43 fn topmost_token_owner(collection: CollectionId, token: TokenId) -> Result<Option<CrossAccountId>>;44 fn const_metadata(collection: CollectionId, token: TokenId) -> Result<Vec<u8>>;44 fn const_metadata(collection: CollectionId, token: TokenId) -> Result<Vec<u8>>;454546 fn collection_properties(collection: CollectionId, properties: Vec<Vec<u8>>) -> Result<Vec<Property>>;46 fn collection_properties(collection: CollectionId, properties: Option<Vec<Vec<u8>>>) -> Result<Vec<Property>>;474748 fn token_properties(48 fn token_properties(49 collection: CollectionId,49 collection: CollectionId,50 token_id: TokenId,50 token_id: TokenId,51 properties: Vec<Vec<u8>>51 properties: Option<Vec<Vec<u8>>>52 ) -> Result<Vec<Property>>;52 ) -> Result<Vec<Property>>;535354 fn property_permissions(54 fn property_permissions(55 collection: CollectionId,55 collection: CollectionId,56 properties: Vec<Vec<u8>>56 properties: Option<Vec<Vec<u8>>>57 ) -> Result<Vec<PropertyKeyPermission>>;57 ) -> Result<Vec<PropertyKeyPermission>>;585859 fn token_data(collection: CollectionId, token_id: TokenId, keys: Vec<Vec<u8>>) -> Result<TokenData<CrossAccountId>>;59 fn token_data(60 collection: CollectionId,61 token_id: TokenId,62 keys: Option<Vec<Vec<u8>>>63 ) -> Result<TokenData<CrossAccountId>>;606461 fn total_supply(collection: CollectionId) -> Result<u32>;65 fn total_supply(collection: CollectionId) -> Result<u32>;runtime/common/src/runtime_apis.rsdiffbeforeafterboth353536 fn collection_properties(36 fn collection_properties(37 collection: CollectionId,37 collection: CollectionId,38 keys: Vec<Vec<u8>>38 keys: Option<Vec<Vec<u8>>>39 ) -> Result<Vec<Property>, DispatchError> {39 ) -> Result<Vec<Property>, DispatchError> {40 let keys = pallet_common::Pallet::<Runtime>::bytes_keys_to_property_keys(keys)?;40 let keys = keys.map(41 |keys| pallet_common::Pallet::<Runtime>::bytes_keys_to_property_keys(keys)42 ).transpose()?;414342 pallet_common::Pallet::<Runtime>::filter_collection_properties(collection, keys)44 pallet_common::Pallet::<Runtime>::filter_collection_properties(collection, keys)43 }45 }444645 fn token_properties(47 fn token_properties(46 collection: CollectionId,48 collection: CollectionId,47 token_id: TokenId,49 token_id: TokenId,48 keys: Vec<Vec<u8>>50 keys: Option<Vec<Vec<u8>>>49 ) -> Result<Vec<Property>, DispatchError> {51 ) -> Result<Vec<Property>, DispatchError> {50 let keys = pallet_common::Pallet::<Runtime>::bytes_keys_to_property_keys(keys)?;52 let keys = keys.map(53 |keys| pallet_common::Pallet::<Runtime>::bytes_keys_to_property_keys(keys)54 ).transpose()?;5551 dispatch_unique_runtime!(collection.token_properties(token_id, keys))56 dispatch_unique_runtime!(collection.token_properties(token_id, keys))52 }57 }535854 fn property_permissions(59 fn property_permissions(55 collection: CollectionId,60 collection: CollectionId,56 keys: Vec<Vec<u8>>61 keys: Option<Vec<Vec<u8>>>57 ) -> Result<Vec<PropertyKeyPermission>, DispatchError> {62 ) -> Result<Vec<PropertyKeyPermission>, DispatchError> {58 let keys = pallet_common::Pallet::<Runtime>::bytes_keys_to_property_keys(keys)?;63 let keys = keys.map(64 |keys| pallet_common::Pallet::<Runtime>::bytes_keys_to_property_keys(keys)65 ).transpose()?;596660 pallet_common::Pallet::<Runtime>::filter_property_permissions(collection, keys)67 pallet_common::Pallet::<Runtime>::filter_property_permissions(collection, keys)61 }68 }626963 fn token_data(70 fn token_data(64 collection: CollectionId,71 collection: CollectionId,65 token_id: TokenId,72 token_id: TokenId,66 keys: Vec<Vec<u8>>73 keys: Option<Vec<Vec<u8>>>67 ) -> Result<TokenData<CrossAccountId>, DispatchError> {74 ) -> Result<TokenData<CrossAccountId>, DispatchError> {68 let token_data = TokenData {75 let token_data = TokenData {69 const_data: Self::const_metadata(collection, token_id)?,76 const_data: Self::const_metadata(collection, token_id)?,