diff options
Diffstat (limited to 'tvix/nix-compat/src/store_path')
-rw-r--r-- | tvix/nix-compat/src/store_path/mod.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/tvix/nix-compat/src/store_path/mod.rs b/tvix/nix-compat/src/store_path/mod.rs index 836374b80049..c744f1a46afe 100644 --- a/tvix/nix-compat/src/store_path/mod.rs +++ b/tvix/nix-compat/src/store_path/mod.rs @@ -29,7 +29,7 @@ pub enum Error { #[error("Dash is missing between hash and name")] MissingDash, #[error("Hash encoding is invalid: {0}")] - InvalidHashEncoding(DecodeError), + InvalidHashEncoding(#[from] DecodeError), #[error("Invalid length")] InvalidLength, #[error( @@ -67,6 +67,13 @@ impl StorePath { pub fn name(&self) -> &str { self.name.as_ref() } + + pub fn as_ref(&self) -> StorePathRef<'_> { + StorePathRef { + digest: self.digest, + name: &self.name, + } + } } impl PartialOrd for StorePath { @@ -176,7 +183,7 @@ impl Serialize for StorePath { /// Like [StorePath], but without a heap allocation for the name. /// Used by [StorePath] for parsing. /// -#[derive(Debug, Eq, PartialEq)] +#[derive(Debug, Eq, PartialEq, Clone, Copy)] pub struct StorePathRef<'a> { digest: [u8; DIGEST_SIZE], name: &'a str, @@ -237,8 +244,7 @@ impl<'a> StorePathRef<'a> { Err(Error::InvalidLength)? } - let digest = nixbase32::decode_fixed(&s[..ENCODED_DIGEST_SIZE]) - .map_err(Error::InvalidHashEncoding)?; + let digest = nixbase32::decode_fixed(&s[..ENCODED_DIGEST_SIZE])?; if s[ENCODED_DIGEST_SIZE] != b'-' { return Err(Error::MissingDash); |