diff options
author | Florian Klink <flokli@flokli.de> | 2024-04-05T22·20+0300 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2024-04-05T23·28+0000 |
commit | 39276dc5b41fa5e756ebb8ae30b4d2ac91995be7 (patch) | |
tree | 3f74aa26253e230608c3820e8cdc7dad676f907f /tvix/store/src/proto/mod.rs | |
parent | 9e8106305018057821905f1c7b8249e5a882336c (diff) |
feat(tvix/store/proto): avoid clone in PathInfo::validate() r/7856
Have this return a StorePathRef<'_>, rather than a StorePath, and leave it up to the caller to possibly convert it to a owned StorePath. This avoids some allocations, if we only want to validate. Change-Id: I5cf8e246fe02bd4e631f46a5cb86d3f77a728a0d Reviewed-on: https://cl.tvl.fyi/c/depot/+/11361 Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Reviewed-by: Connor Brewster <cbrewster@hey.com>
Diffstat (limited to 'tvix/store/src/proto/mod.rs')
-rw-r--r-- | tvix/store/src/proto/mod.rs | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/tvix/store/src/proto/mod.rs b/tvix/store/src/proto/mod.rs index 10fde33527cf..dd3c18d77107 100644 --- a/tvix/store/src/proto/mod.rs +++ b/tvix/store/src/proto/mod.rs @@ -74,23 +74,20 @@ pub enum ValidatePathInfoError { /// Parses a root node name. /// -/// On success, this returns the parsed [store_path::StorePath]. +/// On success, this returns the parsed [store_path::StorePathRef]. /// On error, it returns an error generated from the supplied constructor. fn parse_node_name_root<E>( name: &[u8], err: fn(Vec<u8>, store_path::Error) -> E, -) -> Result<store_path::StorePath, E> { - match store_path::StorePath::from_bytes(name) { - Ok(np) => Ok(np), - Err(e) => Err(err(name.to_vec(), e)), - } +) -> Result<store_path::StorePathRef<'_>, E> { + store_path::StorePathRef::from_bytes(name).map_err(|e| err(name.to_vec(), e)) } impl PathInfo { /// validate performs some checks on the PathInfo struct, /// Returning either a [store_path::StorePath] of the root node, or a /// [ValidatePathInfoError]. - pub fn validate(&self) -> Result<store_path::StorePath, ValidatePathInfoError> { + pub fn validate(&self) -> Result<store_path::StorePathRef<'_>, ValidatePathInfoError> { // ensure the references have the right number of bytes. for (i, reference) in self.references.iter().enumerate() { if reference.len() != store_path::DIGEST_SIZE { @@ -154,8 +151,7 @@ impl PathInfo { // converting to this field. if let Some(deriver) = &narinfo.deriver { store_path::StorePathRef::from_name_and_digest(&deriver.name, &deriver.digest) - .map_err(ValidatePathInfoError::InvalidDeriverField)? - .to_owned(); + .map_err(ValidatePathInfoError::InvalidDeriverField)?; } } } |