pub mod filter;
pub use collect::Collect;
pub use filter::Filter;
pub use ignore::Ignore;
pub use report::Report;
mod collect;
mod ignore;
mod report;
use sealed::sealed;
use crate::{ClassifiedDiagnostic, Diagnostic, DiagnosticSeverity, code};
pub trait Sink<S, D = code::DefaultDiscriminant> {
fn add(&mut self, diagnostic: ClassifiedDiagnostic<S, D>);
}
#[sealed]
pub trait SinkExt<S, D = code::DefaultDiscriminant>: Sink<S, D> {
fn add_error(&mut self, diagnostic: Diagnostic<S, D>) {
self.add(diagnostic.classify(DiagnosticSeverity::Error));
}
fn add_warning(&mut self, diagnostic: Diagnostic<S, D>) {
self.add(diagnostic.classify(DiagnosticSeverity::Warning));
}
fn add_advice(&mut self, diagnostic: Diagnostic<S, D>) {
self.add(diagnostic.classify(DiagnosticSeverity::Advice));
}
fn filter<C>(self, context: C, filter: filter::FilterFn<C, S, D>) -> Filter<Self, C, S, D>
where
Self: Sized,
{
Filter::new(self, context, filter)
}
fn ignore(self) -> Ignore<S>
where
Self: Sized,
{
Ignore::new()
}
}
#[sealed]
impl<T, S, D> SinkExt<S, D> for T where T: Sink<S, D> {}