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 <cbrewster@hey.com> Tested-by: BuildkiteCI
This commit is contained in:
parent
5f8eb4eeaa
commit
2d2c4322d9
10 changed files with 161 additions and 39 deletions
|
|
@ -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<StorePath, Error> {
|
||||
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<String, Error> {
|
|||
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 `-`,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue