This commit is contained in:
Brooks Rady 2026-06-03 13:58:10 +09:00 committed by GitHub
commit 916241b4f9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 55 additions and 0 deletions

View File

@ -69,6 +69,48 @@ pub trait Diagnostic: std::error::Error {
}
}
macro_rules! blanket_ref_impls {
($($ref_type:ty),+ $(,)?) => {
$(
impl<T: Diagnostic> Diagnostic for $ref_type {
fn code<'a>(&'a self) -> Option<Box<dyn Display + 'a>> {
(**self).code()
}
fn severity(&self) -> Option<Severity> {
(**self).severity()
}
fn help<'a>(&'a self) -> Option<Box<dyn Display + 'a>> {
(**self).help()
}
fn url<'a>(&'a self) -> Option<Box<dyn Display + 'a>> {
(**self).url()
}
fn source_code(&self) -> Option<&dyn SourceCode> {
(**self).source_code()
}
fn labels(&self) -> Option<Box<dyn Iterator<Item = LabeledSpan> + '_>> {
(**self).labels()
}
fn related<'a>(&'a self) -> Option<Box<dyn Iterator<Item = &'a dyn Diagnostic> + 'a>> {
(**self).related()
}
fn diagnostic_source(&self) -> Option<&dyn Diagnostic> {
(**self).diagnostic_source()
}
}
)+
};
}
blanket_ref_impls!(&T, Box<T>);
macro_rules! box_error_impls {
($($box_type:ty),*) => {
$(

13
tests/test_blanket.rs Normal file
View File

@ -0,0 +1,13 @@
use miette::{Diagnostic, MietteDiagnostic};
fn assert_diagnostic<T: Diagnostic>() {}
#[test]
fn test_ref() {
assert_diagnostic::<&MietteDiagnostic>()
}
#[test]
fn test_box() {
assert_diagnostic::<Box<MietteDiagnostic>>()
}