cxx_gen/syntax/
report.rs

1use quote::ToTokens;
2use std::fmt::Display;
3use syn::{Error, Result};
4
5pub(crate) struct Errors {
6    errors: Vec<Error>,
7}
8
9impl Errors {
10    pub(crate) fn new() -> Self {
11        Errors { errors: Vec::new() }
12    }
13
14    pub(crate) fn error(&mut self, sp: impl ToTokens, msg: impl Display) {
15        self.errors.push(Error::new_spanned(sp, msg));
16    }
17
18    pub(crate) fn push(&mut self, error: Error) {
19        self.errors.push(error);
20    }
21
22    pub(crate) fn propagate(&mut self) -> Result<()> {
23        let mut iter = self.errors.drain(..);
24        let Some(mut all_errors) = iter.next() else {
25            return Ok(());
26        };
27        for err in iter {
28            all_errors.combine(err);
29        }
30        Err(all_errors)
31    }
32}