diff --git a/Cargo.toml b/Cargo.toml index 1d7565b..ccd8829 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ authors = ["trivernis "] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +miette = "5.5.0" nu-command = "0.75.0" nu-engine = "0.75.0" nu-parser = "0.75.0" diff --git a/src/error.rs b/src/error.rs index be7931a..aefeb5f 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,3 +1,4 @@ +use miette::Diagnostic; use nu_parser::ParseError; use nu_protocol::ShellError; use thiserror::Error; @@ -15,3 +16,69 @@ pub enum CrateError { #[error("Could not find the function {0}")] FunctionNotFound(String), } + +impl Diagnostic for CrateError { + fn code<'a>(&'a self) -> Option> { + match self { + CrateError::NuShellError(n) => n.code(), + CrateError::NuParseError(n) => n.code(), + _ => None, + } + } + + fn severity(&self) -> Option { + match self { + CrateError::NuShellError(n) => n.severity(), + CrateError::NuParseError(n) => n.severity(), + _ => None, + } + } + + fn help<'a>(&'a self) -> Option> { + match self { + CrateError::NuShellError(n) => n.help(), + CrateError::NuParseError(n) => n.help(), + _ => None, + } + } + + fn url<'a>(&'a self) -> Option> { + match self { + CrateError::NuShellError(n) => n.url(), + CrateError::NuParseError(n) => n.url(), + _ => None, + } + } + + fn source_code(&self) -> Option<&dyn miette::SourceCode> { + match self { + CrateError::NuShellError(n) => n.source_code(), + CrateError::NuParseError(n) => n.source_code(), + _ => None, + } + } + + fn labels(&self) -> Option + '_>> { + match self { + CrateError::NuShellError(n) => n.labels(), + CrateError::NuParseError(n) => n.labels(), + _ => None, + } + } + + fn related<'a>(&'a self) -> Option + 'a>> { + match self { + CrateError::NuShellError(n) => n.related(), + CrateError::NuParseError(n) => n.related(), + _ => None, + } + } + + fn diagnostic_source(&self) -> Option<&dyn Diagnostic> { + match self { + CrateError::NuShellError(n) => n.diagnostic_source(), + CrateError::NuParseError(n) => n.diagnostic_source(), + _ => None, + } + } +}