diff options
author | Florian Klink <flokli@flokli.de> | 2024-01-05T11·31+0200 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2024-01-05T16·43+0000 |
commit | 6b42aef88d80b7e65240ffc21597cf719e811c55 (patch) | |
tree | 7b4c96a91d678059f54045d1bd003bafd6ac188a /tvix/castore/src/proto/mod.rs | |
parent | f20969de9b42527518b27e3fb78b6d487780baff (diff) |
fix(tvix/castore): validate Option<Node> r/7347
Extend our validation function to also check for the None case. Change-Id: Ib75f880646d7fb3d66588f1988e61ec18be816a2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10534 Autosubmit: flokli <flokli@flokli.de> Reviewed-by: raitobezarius <tvl@lahfa.xyz> Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/castore/src/proto/mod.rs')
-rw-r--r-- | tvix/castore/src/proto/mod.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/tvix/castore/src/proto/mod.rs b/tvix/castore/src/proto/mod.rs index c734e8be89ec..9c4df4df53c2 100644 --- a/tvix/castore/src/proto/mod.rs +++ b/tvix/castore/src/proto/mod.rs @@ -24,7 +24,7 @@ pub const FILE_DESCRIPTOR_SET: &[u8] = tonic::include_file_descriptor_set!("tvix #[cfg(test)] mod tests; -/// Errors that can occur during the validation of Directory messages. +/// Errors that can occur during the validation of [Directory] messages. #[derive(Debug, PartialEq, Eq, thiserror::Error)] pub enum ValidateDirectoryError { /// Elements are not in sorted order @@ -43,6 +43,8 @@ pub enum ValidateDirectoryError { /// Errors that occur during Node validation #[derive(Debug, PartialEq, Eq, thiserror::Error)] pub enum ValidateNodeError { + #[error("No node set")] + NoNodeSet, /// Invalid digest length encountered #[error("Invalid Digest length: {0}")] InvalidDigestLen(usize), @@ -103,6 +105,18 @@ impl NamedNode for node::Node { } } +impl Node { + /// Ensures the node has a valid enum kind (is Some), and passes its + // per-enum validation. + pub fn validate(&self) -> Result<(), ValidateNodeError> { + if let Some(node) = self.node.as_ref() { + node.validate() + } else { + Err(ValidateNodeError::NoNodeSet) + } + } +} + impl node::Node { /// Returns the node with a new name. pub fn rename(self, name: bytes::Bytes) -> Self { |