feat(Diagnostic): Implement `Diagnostic` for `Infallible` (#402)

This commit is contained in:
Cass Fridkin 2024-09-25 11:30:33 -06:00 committed by GitHub
parent d60c8f10f1
commit f3fb4c1ecd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 56 additions and 0 deletions

55
src/diagnostic_impls.rs Normal file
View File

@ -0,0 +1,55 @@
/*!
Default trait implementations for [`Diagnostic`].
*/
use std::{convert::Infallible, fmt::Display};
use crate::{Diagnostic, LabeledSpan, Severity, SourceCode};
impl Diagnostic for Infallible {
fn code<'a>(&'a self) -> Option<Box<dyn Display + 'a>> {
match *self {}
}
fn severity(&self) -> Option<Severity> {
match *self {}
}
fn help<'a>(&'a self) -> Option<Box<dyn Display + 'a>> {
match *self {}
}
fn url<'a>(&'a self) -> Option<Box<dyn Display + 'a>> {
match *self {}
}
fn source_code(&self) -> Option<&dyn SourceCode> {
match *self {}
}
fn labels(&self) -> Option<Box<dyn Iterator<Item = LabeledSpan> + '_>> {
match *self {}
}
fn related<'a>(&'a self) -> Option<Box<dyn Iterator<Item = &'a dyn Diagnostic> + 'a>> {
match *self {}
}
fn diagnostic_source(&self) -> Option<&dyn Diagnostic> {
match *self {}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::Report;
/// Test that [`Infallible`] implements [`Diagnostic`] by seeing if a function that's generic over `Diagnostic`
/// will accept `Infallible` as a type parameter.
#[test]
fn infallible() {
let _ = Report::new::<Infallible>;
}
}

View File

@ -788,6 +788,7 @@ pub use protocol::*;
mod chain; mod chain;
mod diagnostic_chain; mod diagnostic_chain;
mod diagnostic_impls;
mod error; mod error;
mod eyreish; mod eyreish;
#[cfg(feature = "fancy-base")] #[cfg(feature = "fancy-base")]