--- a/pallets/common/src/erc.rs +++ b/pallets/common/src/erc.rs @@ -30,7 +30,6 @@ AccessMode, CollectionMode, CollectionPermissions, OwnerRestrictedSet, Property, SponsoringRateLimit, SponsorshipState, }; -use alloc::format; use crate::{ Pallet, CollectionHandle, Config, CollectionProperties, SelfWeightOf, eth, weights::WeightInfo, @@ -123,16 +122,7 @@ let properties = properties .into_iter() - .map(|property| { - let (key, value) = property.take_key_value(); - let key = >::from(key) - .try_into() - .map_err(|_| "key too large")?; - - let value = value.0.try_into().map_err(|_| "value too large")?; - - Ok(Property { key, value }) - }) + .map(eth::Property::try_into) .collect::>>()?; >::set_collection_properties(self, &caller, properties) @@ -210,12 +200,7 @@ let properties = properties .into_iter() - .map(|p| { - let key = - string::from_utf8(p.key.into()).map_err(|e| Error::Revert(format!("{}", e)))?; - let value = bytes(p.value.to_vec()); - Ok(eth::Property::new(key, value)) - }) + .map(Property::try_into) .collect::>>()?; Ok(properties) } --- a/pallets/common/src/eth.rs +++ b/pallets/common/src/eth.rs @@ -175,13 +175,28 @@ value: evm_coder::types::bytes, } -impl Property { - pub fn new(key: evm_coder::types::string, value: evm_coder::types::bytes) -> Self { - Self { key, value } +impl TryFrom for Property { + type Error = evm_coder::execution::Error; + + fn try_from(from: up_data_structs::Property) -> Result { + let key = evm_coder::types::string::from_utf8(from.key.into()) + .map_err(|e| Self::Error::Revert(format!("utf8 conversion error: {}", e)))?; + let value = evm_coder::types::bytes(from.value.to_vec()); + Ok(Property { key, value }) } +} - pub fn take_key_value(self) -> (evm_coder::types::string, evm_coder::types::bytes) { - (self.key, self.value) +impl TryInto for Property { + type Error = evm_coder::execution::Error; + + fn try_into(self) -> Result { + let key = >::from(self.key) + .try_into() + .map_err(|_| "key too large")?; + + let value = self.value.0.try_into().map_err(|_| "value too large")?; + + Ok(up_data_structs::Property { key, value }) } } --- a/pallets/nonfungible/src/erc.rs +++ b/pallets/nonfungible/src/erc.rs @@ -170,16 +170,7 @@ let properties = properties .into_iter() - .map(|property| { - let (key, value) = property.take_key_value(); - let key = >::from(key) - .try_into() - .map_err(|_| "key too large")?; - - let value = value.0.try_into().map_err(|_| "value too large")?; - - Ok(Property { key, value }) - }) + .map(pallet_common::eth::Property::try_into) .collect::>>()?; >::set_token_properties( @@ -793,12 +784,7 @@ if keys.is_empty() { None } else { Some(keys) }, ) .into_iter() - .map(|p| { - let key = string::from_utf8(p.key.to_vec()) - .map_err(|e| Error::Revert(alloc::format!("{}", e)))?; - let value = bytes(p.value.to_vec()); - Ok(pallet_common::eth::Property::new(key, value)) - }) + .map(pallet_common::eth::Property::try_from) .collect::>>() } @@ -1055,16 +1041,7 @@ let properties = properties .into_iter() - .map(|property| { - let (key, value) = property.take_key_value(); - let key = >::from(key) - .try_into() - .map_err(|_| "key too large")?; - - let value = value.0.try_into().map_err(|_| "value too large")?; - - Ok(Property { key, value }) - }) + .map(pallet_common::eth::Property::try_into) .collect::>>()? .try_into() .map_err(|_| Error::Revert(alloc::format!("too many properties")))?; --- a/pallets/refungible/src/erc.rs +++ b/pallets/refungible/src/erc.rs @@ -173,16 +173,7 @@ let properties = properties .into_iter() - .map(|property| { - let (key, value) = property.take_key_value(); - let key = >::from(key) - .try_into() - .map_err(|_| "key too large")?; - - let value = value.0.try_into().map_err(|_| "value too large")?; - - Ok(Property { key, value }) - }) + .map(pallet_common::eth::Property::try_into) .collect::>>()?; >::set_token_properties( @@ -828,12 +819,7 @@ if keys.is_empty() { None } else { Some(keys) }, ) .into_iter() - .map(|p| { - let key = string::from_utf8(p.key.to_vec()) - .map_err(|e| Error::Revert(alloc::format!("{}", e)))?; - let value = bytes(p.value.to_vec()); - Ok(pallet_common::eth::Property::new(key, value)) - }) + .map(pallet_common::eth::Property::try_from) .collect::>>() } /// @notice Transfer ownership of an RFT @@ -1101,16 +1087,7 @@ let properties = properties .into_iter() - .map(|property| { - let (key, value) = property.take_key_value(); - let key = >::from(key) - .try_into() - .map_err(|_| "key too large")?; - - let value = value.0.try_into().map_err(|_| "value too large")?; - - Ok(Property { key, value }) - }) + .map(pallet_common::eth::Property::try_into) .collect::>>()? .try_into() .map_err(|_| Error::Revert(alloc::format!("too many properties")))?;