about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tvix/derivation/src/errors.rs12
-rw-r--r--tvix/derivation/src/lib.rs2
-rw-r--r--tvix/derivation/src/output.rs9
-rw-r--r--tvix/derivation/src/validate.rs7
4 files changed, 18 insertions, 12 deletions
diff --git a/tvix/derivation/src/errors.rs b/tvix/derivation/src/errors.rs
index baf1d6ca5398..75b101efddae 100644
--- a/tvix/derivation/src/errors.rs
+++ b/tvix/derivation/src/errors.rs
@@ -13,9 +13,8 @@ pub enum DerivationError {
     MoreThanOneOutputButFixed(),
     #[error("Invalid output name for fixed-output derivation: {0}.")]
     InvalidOutputNameForFixed(String),
-    #[error("Unable to parse path of output {0}: {1}.")]
-    InvalidOutputPath(String, ParseStorePathError),
-
+    #[error("Unable to validate output {0}: {1}.")]
+    InvalidOutput(String, OutputError),
     // input derivation
     #[error("Unable to parse input derivation path {0}: {1}.")]
     InvalidInputDerivationPath(String, ParseStorePathError),
@@ -42,3 +41,10 @@ pub enum DerivationError {
     #[error("Invalid environment key {0}")]
     InvalidEnvironmentKey(String),
 }
+
+/// Errors that can occur during the validation of a specific [Output] of a [Derviation].
+#[derive(Debug, Error)]
+pub enum OutputError {
+    #[error("Invalid ouput path {0}: {1}")]
+    InvalidOutputPath(String, ParseStorePathError),
+}
diff --git a/tvix/derivation/src/lib.rs b/tvix/derivation/src/lib.rs
index 6134ffb02a4c..01b7552a6f18 100644
--- a/tvix/derivation/src/lib.rs
+++ b/tvix/derivation/src/lib.rs
@@ -12,5 +12,5 @@ mod tests;
 // Public API of the crate.
 
 pub use derivation::Derivation;
-pub use errors::DerivationError;
+pub use errors::{DerivationError, OutputError};
 pub use output::{Hash, Output};
diff --git a/tvix/derivation/src/output.rs b/tvix/derivation/src/output.rs
index b8bd49fbbb18..982ac7c9eb79 100644
--- a/tvix/derivation/src/output.rs
+++ b/tvix/derivation/src/output.rs
@@ -1,5 +1,7 @@
 use serde::{Deserialize, Serialize};
-use tvix_store::store_path::{ParseStorePathError, StorePath};
+use tvix_store::store_path::StorePath;
+
+use crate::OutputError;
 
 #[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)]
 pub struct Output {
@@ -22,9 +24,10 @@ impl Output {
         self.hash.is_some()
     }
 
-    pub fn validate(&self) -> Result<(), ParseStorePathError> {
+    pub fn validate(&self) -> Result<(), OutputError> {
+        // TODO: add validation for hash, hashAlgo
         if let Err(e) = StorePath::from_absolute_path(&self.path) {
-            return Err(e);
+            return Err(OutputError::InvalidOutputPath(self.path.to_string(), e));
         }
         Ok(())
     }
diff --git a/tvix/derivation/src/validate.rs b/tvix/derivation/src/validate.rs
index 65809ef5e5f3..a2143509011b 100644
--- a/tvix/derivation/src/validate.rs
+++ b/tvix/derivation/src/validate.rs
@@ -39,11 +39,8 @@ impl Derivation {
             }
 
             if let Err(e) = output.validate() {
-                return Err(DerivationError::InvalidOutputPath(
-                    output_name.to_string(),
-                    e,
-                ));
-            };
+                return Err(DerivationError::InvalidOutput(output_name.to_string(), e));
+            }
         }
 
         // Validate all input_derivations