--- a/primitives/data-structs/src/lib.rs +++ b/primitives/data-structs/src/lib.rs @@ -1133,7 +1133,7 @@ scope: PropertyScope, key: PropertyKey, value: Self::Value, - ) -> Result<(), PropertiesError>; + ) -> Result, PropertiesError>; /// Try to set property with scope from iterator. fn try_scoped_set_from_iter( @@ -1154,7 +1154,11 @@ } /// Try to set property. - fn try_set(&mut self, key: PropertyKey, value: Self::Value) -> Result<(), PropertiesError> { + fn try_set( + &mut self, + key: PropertyKey, + value: Self::Value, + ) -> Result, PropertiesError> { self.try_scoped_set(PropertyScope::None, key, value) } @@ -1239,15 +1243,13 @@ scope: PropertyScope, key: PropertyKey, value: Self::Value, - ) -> Result<(), PropertiesError> { + ) -> Result, PropertiesError> { Self::check_property_key(&key)?; let key = scope.apply(key)?; self.0 .try_insert(key, value) - .map_err(|_| PropertiesError::PropertyLimitReached)?; - - Ok(()) + .map_err(|_| PropertiesError::PropertyLimitReached) } } @@ -1307,7 +1309,7 @@ scope: PropertyScope, key: PropertyKey, value: Self::Value, - ) -> Result<(), PropertiesError> { + ) -> Result, PropertiesError> { let value_len = value.len(); if self.consumed_space as usize + value_len > self.space_limit as usize @@ -1316,11 +1318,13 @@ return Err(PropertiesError::NoSpaceForProperty); } - self.map.try_scoped_set(scope, key, value)?; + let old_value = self.map.try_scoped_set(scope, key, value)?; - self.consumed_space += value_len as u32; + if old_value.is_none() { + self.consumed_space += value_len as u32; + } - Ok(()) + Ok(old_value) } }