xref: /third_party/rust/crates/cxx/macro/src/syntax/report.rs
  • Home
  • History
  • Annotate Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
  • only in /third_party/rust/crates/cxx/macro/src/syntax/
133d722a9Sopenharmony_ciuse quote::ToTokens;
233d722a9Sopenharmony_ciuse std::fmt::Display;
333d722a9Sopenharmony_ciuse syn::{Error, Result};
433d722a9Sopenharmony_ci
533d722a9Sopenharmony_cipub struct Errors {
633d722a9Sopenharmony_ci    errors: Vec<Error>,
733d722a9Sopenharmony_ci}
833d722a9Sopenharmony_ci
933d722a9Sopenharmony_ciimpl Errors {
1033d722a9Sopenharmony_ci    pub fn new() -> Self {
1133d722a9Sopenharmony_ci        Errors { errors: Vec::new() }
1233d722a9Sopenharmony_ci    }
1333d722a9Sopenharmony_ci
1433d722a9Sopenharmony_ci    pub fn error(&mut self, sp: impl ToTokens, msg: impl Display) {
1533d722a9Sopenharmony_ci        self.errors.push(Error::new_spanned(sp, msg));
1633d722a9Sopenharmony_ci    }
1733d722a9Sopenharmony_ci
1833d722a9Sopenharmony_ci    pub fn push(&mut self, error: Error) {
1933d722a9Sopenharmony_ci        self.errors.push(error);
2033d722a9Sopenharmony_ci    }
2133d722a9Sopenharmony_ci
2233d722a9Sopenharmony_ci    pub fn propagate(&mut self) -> Result<()> {
2333d722a9Sopenharmony_ci        let mut iter = self.errors.drain(..);
2433d722a9Sopenharmony_ci        let mut all_errors = match iter.next() {
2533d722a9Sopenharmony_ci            Some(err) => err,
2633d722a9Sopenharmony_ci            None => return Ok(()),
2733d722a9Sopenharmony_ci        };
2833d722a9Sopenharmony_ci        for err in iter {
2933d722a9Sopenharmony_ci            all_errors.combine(err);
3033d722a9Sopenharmony_ci        }
3133d722a9Sopenharmony_ci        Err(all_errors)
3233d722a9Sopenharmony_ci    }
3333d722a9Sopenharmony_ci}
34

Indexes created Thu Nov 07 10:32:03 CST 2024