use super::Sink;
use crate::{ClassifiedDiagnostic, code};
#[derive(Default)]
pub struct Collect<S, D = code::DefaultDiscriminant> {
diagnostics: Vec<ClassifiedDiagnostic<S, D>>,
}
impl<S, D> Collect<S, D> {
pub const fn new() -> Self {
Self {
diagnostics: Vec::new(),
}
}
pub const fn diagnostics(&self) -> &[ClassifiedDiagnostic<S, D>] {
&self.diagnostics.as_slice()
}
pub fn take_diagnostics(self) -> Box<[ClassifiedDiagnostic<S, D>]> {
self.diagnostics.into_boxed_slice()
}
}
impl<S, D> Sink<S, D> for Collect<S, D> {
fn add(&mut self, diagnostic: ClassifiedDiagnostic<S, D>) {
self.diagnostics.push(diagnostic);
}
}