use color_eyre::eyre::{eyre, Result};
use super::diagnostic::Diagnostic;
use super::source::Source;
#[derive(Default, Debug, Clone, PartialEq, Eq)]
pub struct Session {
failed: bool,
diagnostics: Vec<Diagnostic>,
}
impl Session {
pub const fn new() -> Self {
Self {
failed: false,
diagnostics: Vec::new(),
}
}
pub fn report(&mut self, diagnostic: Diagnostic) {
self.diagnostics.push(diagnostic);
}
pub fn mark_failed(&mut self) {
self.failed = true;
}
pub fn emit(&self, source: &Source<'_>) {
for diagnostic in &self.diagnostics {
diagnostic.emit(source);
}
}
pub fn try_finish(self) -> Result<()> {
if self.failed {
Err(eyre!("Session contains errors"))
} else {
Ok(())
}
}
}