diff options
Diffstat (limited to 'tvix/cli/src/errors.rs')
-rw-r--r-- | tvix/cli/src/errors.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tvix/cli/src/errors.rs b/tvix/cli/src/errors.rs new file mode 100644 index 000000000000..8eaaef1579aa --- /dev/null +++ b/tvix/cli/src/errors.rs @@ -0,0 +1,49 @@ +use std::{error, fmt::Display, rc::Rc}; +use tvix_derivation::DerivationError; + +#[derive(Debug)] +pub enum Error { + // Errors related to derivation construction + DuplicateOutput(String), + ConflictingOutputTypes, + DuplicateEnvVar(String), + ShadowedOutput(String), + InvalidDerivation(DerivationError), +} + +impl Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Error::DuplicateOutput(name) => { + write!(f, "an output with the name '{name}' is already defined") + } + + Error::ConflictingOutputTypes => write!( + f, + "fixed-output derivations can only have the default `out`-output" + ), + + Error::DuplicateEnvVar(name) => write!( + f, + "the environment variable '{name}' has already been set in this derivation" + ), + Error::ShadowedOutput(name) => write!( + f, + "the environment variable '{name}' shadows the name of an output" + ), + Error::InvalidDerivation(error) => write!(f, "invalid derivation parameters: {error}"), + } + } +} + +impl error::Error for Error { + fn source(&self) -> Option<&(dyn error::Error + 'static)> { + None + } +} + +impl From<Error> for tvix_eval::ErrorKind { + fn from(err: Error) -> Self { + tvix_eval::ErrorKind::TvixError(Rc::new(err)) + } +} |