ogrim-macros 0.0.3

Helper crate for `ogrim`. Please see the docs of `ogrim` for more information. Do not use this crate directly, API stability is not guaranteed!
Documentation
use proc_macro2::{TokenStream, TokenTree, Span, Group, Punct, Ident, Delimiter, Spacing, Literal};


#[derive(Debug)]
pub(crate) struct Error {
    pub(crate) span: Option<Span>,
    pub(crate) msg: String,
}

impl Error {
    pub(crate) fn to_compile_error(&self) -> TokenStream {
        let span = self.span.unwrap_or(Span::call_site());
        let tokens = vec![
            TokenTree::from(Ident::new("compile_error", span)),
            TokenTree::from(Punct::new('!', Spacing::Alone)),
            TokenTree::from(Group::new(
                Delimiter::Parenthesis,
                TokenTree::from(Literal::string(&self.msg)).into(),
            )),
        ];

        tokens.into_iter().map(|mut t| { t.set_span(span); t }).collect()
    }
}

macro_rules! err {
    (@ $span:expr, $($t:tt)*) => {
        Error {
            span: $span.into(),
            msg: format!($($t)*),
        }
    };
    ($($t:tt)*) => {
        Error {
            span: None,
            msg: format!($($t)*),
        }
    };
}

pub(crate) use err;