bern-macros 0.1.0

Procedural macros for Bern declarations
Documentation
use bern_protocol::Type;
use proc_macro2::TokenStream;
use quote::quote;

pub fn type_tokens(ty: &Type) -> TokenStream {
    let p = quote!(::bern::__private::protocol);
    match ty {
        Type::Unit => quote!(#p::Type::Unit),
        Type::Bool => quote!(#p::Type::Bool),
        Type::Int => quote!(#p::Type::Int),
        Type::Float => quote!(#p::Type::Float),
        Type::Text => quote!(#p::Type::Text),
        Type::Enum { name } => quote!(#p::Type::Enum { name: ::std::string::String::from(#name) }),
        Type::Record { name } => {
            quote!(#p::Type::Record { name: ::std::string::String::from(#name) })
        }
        Type::Optional { inner } => {
            let inner = type_tokens(inner);
            quote!(#p::Type::optional(#inner))
        }
        Type::List { inner } => {
            let inner = type_tokens(inner);
            quote!(#p::Type::list(#inner))
        }
    }
}