hard-xml-derive 1.41.0

Derive marco of hard-xml.
Documentation
use proc_macro2::Span;
use quote::ToTokens;
use std::fmt::Display;
use syn::Error;

#[derive(Default)]
pub struct Context {
    pub(crate) errors: Vec<Error>,
}

impl Context {
    pub(crate) fn check(self) -> Result<(), Vec<Error>> {
        if self.errors.is_empty() {
            Ok(())
        } else {
            Err(self.errors)
        }
    }

    pub(crate) fn push(&mut self, error: Error) {
        self.errors.push(error)
    }

    pub(crate) fn push_new_error<T>(&mut self, span: Span, message: T)
    where
        T: Display,
    {
        self.push(Error::new(span, message))
    }

    pub(crate) fn push_spanned_error<T, U>(&mut self, tokens: T, message: U)
    where
        T: ToTokens,
        U: Display,
    {
        self.push(Error::new_spanned(tokens, message))
    }
}