use thiserror::Error; use crate::{Diagnostic, Report}; /// Convenience [Diagnostic] that can be used as an "anonymous" wrapper for /// Errors. This is intended to be paired with [IntoDiagnostic]. #[derive(Debug, Error)] #[error(transparent)] struct DiagnosticError(Box); impl Diagnostic for DiagnosticError {} /** Convenience trait that adds a `.into_diagnostic()` method that converts a type to a `Result`. */ pub trait IntoDiagnostic { /// Converts [Result]-like types that return regular errors into a /// `Result` that returns a [Diagnostic]. fn into_diagnostic(self) -> Result; } impl IntoDiagnostic for Result { fn into_diagnostic(self) -> Result { self.map_err(|e| DiagnosticError(Box::new(e)).into()) } }