From 2d2c4322d93308ddffe1647466abd91025af6a68 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Wed, 11 Oct 2023 00:22:40 +0200 Subject: feat(tvix/store/protos): add Deriver field to PathInfo This uses the newly introduced StorePath message type to add a Deriver field to the PathInfo message. Support for validation is added to both the golang and rust implementation. This includes extending unit tests. Change-Id: Ifc3eb3263fa25b9eec260db354cd74234c40af7e Reviewed-on: https://cl.tvl.fyi/c/depot/+/9647 Reviewed-by: Connor Brewster Tested-by: BuildkiteCI --- tvix/nix-compat/src/store_path/mod.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'tvix/nix-compat/src/store_path') diff --git a/tvix/nix-compat/src/store_path/mod.rs b/tvix/nix-compat/src/store_path/mod.rs index bd856b376522..9253b2a8d741 100644 --- a/tvix/nix-compat/src/store_path/mod.rs +++ b/tvix/nix-compat/src/store_path/mod.rs @@ -116,6 +116,14 @@ impl StorePath { } } + /// Construct a [StorePath] from a name and digest. + pub fn from_name_and_digest(name: String, digest: &[u8]) -> Result { + Ok(Self { + name: validate_name(name.as_bytes())?, + digest: digest.try_into().map_err(|_| Error::InvalidLength())?, + }) + } + /// Decompose a string into a [StorePath] and a [PathBuf] containing the /// rest of the path, or an error. #[cfg(target_family = "unix")] @@ -179,6 +187,14 @@ pub(crate) fn validate_name(s: &[u8]) -> Result { Ok(String::from_utf8(s.to_vec()).unwrap()) } +/// Ensures the StorePath fulfils the requirements for store paths. +/// Useful when populating the struct manually instead of parsing. +pub fn validate(s: &StorePath) -> Result<(), Error> { + validate_name(s.name.as_bytes())?; + + Ok(()) +} + impl fmt::Display for StorePath { /// The string representation of a store path starts with a digest (20 /// bytes), [crate::nixbase32]-encoded, followed by a `-`, -- cgit 1.4.1