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()) } }