bin_codec_derive 0.1.0

binary encoder decoder with bit field
Documentation
use proc_macro2::*;
use syn::spanned::Spanned;

pub fn error<T: Spanned>(span: &T, s: &str) -> TokenStream {
    let (start, end) = (span.span(), span.span());
    let mut v = Vec::new();
    v.push(respan(Literal::string(&format!("bin_codec: {}", s)), Span::call_site()));
    let group = v.into_iter().collect();

    let mut r = Vec::<TokenTree>::new();
    r.push(respan(Ident::new("compile_error", start), start));
    r.push(respan(Punct::new('!', Spacing::Alone), Span::call_site()));
    r.push(respan(Group::new(Delimiter::Brace, group), end));

    r.into_iter().collect()
}

fn respan<T: Into<TokenTree>>(t: T, span: Span) -> TokenTree {
    let mut t = t.into();
    t.set_span(span);
    t
}