use quote;
use syn;
use syn::{Ident, MacroInput};
use proc_macro::TokenStream;
pub fn to_ast(input: &TokenStream) -> MacroInput {
let s = input.to_string();
syn::parse_macro_input(&s).unwrap()
}
pub fn build_hcons_constr(accessors: &Vec<Ident>) -> quote::Tokens {
match accessors.len() {
0 => quote! { ::frunk_core::hlist::HNil },
1 => {
let h = accessors[0].clone();
quote! { ::frunk_core::hlist::HCons{ head: #h, tail: ::frunk_core::hlist::HNil } }
},
_ => {
let h = accessors[0].clone();
let tail = accessors[1..].to_vec();
let hlist_tail = build_hcons_constr(&tail);
quote! { ::frunk_core::hlist::HCons{ head: #h, tail: #hlist_tail }}
}
}
}