hclog_macros 0.1.0

A simple derive macro for crate hclog
Documentation
use quote::ToTokens;
use proc_macro2::{TokenStream, Span};
use syn::{
    DeriveInput,
    Error,
    Ident,
};

pub (crate) fn debug_print_generated(ast: &DeriveInput, toks: &TokenStream) {
    if let Some(s) = option_env!("HCLOG_MACRO_DEBUG") {
        if s == "1" {
            println!("{}", toks);
        } else if ast.ident == s {
            println!("{}", toks);
        }
    }
}

pub (crate) fn assert_enum() -> syn::Error {
    Error::new(Span::call_site(), "This macro supports enums only")
}
pub (crate) fn assert_variant(span: Span, ty: &str) -> syn::Error {
    Error::new(span, format!("Invalid enum variant: expect Unit but got {} variant", ty))
}
pub (crate) fn assert_discriminant_value(i: &Ident, got: usize, expect: usize) -> syn::Error {
    Error::new(i.span(), format!("Discriminant value for {} out of bounds: expected={} got={}",
            i, expect, got,
        ))
}

pub (crate) fn occurrence_error<T: ToTokens>(fst: T, snd: T, attr: &str, ty: &str) -> syn::Error {
    let mut e = Error::new_spanned(
        snd,
        format!("{} attribute {} can't occur more than once", ty, attr),
    );
    e.combine(Error::new_spanned(fst, "first occurrence was here"));
    e
}