extern crate proc_macro;
#[macro_use]
extern crate quote;
#[macro_use]
extern crate syn;
use proc_macro::TokenStream;
macro_rules! sp_quote {
($($t:tt)*) => (quote_spanned!(proc_macro2::Span::call_site() => $($t)*))
}
mod attr;
mod table_value_param;
#[proc_macro_derive(TableValueRow, attributes(colname))]
pub fn table_value_param(input: TokenStream) -> TokenStream {
let ast: syn::DeriveInput = match syn::parse(input) {
Ok(ast) => ast,
Err(e) => return e.to_compile_error().into(),
};
let result = match ast.data {
syn::Data::Struct(ref s) => table_value_param::for_struct(&ast, &s.fields),
syn::Data::Enum(_) => Err(syn::Error::new_spanned(
&ast.ident,
"TableValueRow can only be derived for structs, not enums",
)),
syn::Data::Union(_) => Err(syn::Error::new_spanned(
&ast.ident,
"TableValueRow can only be derived for structs, not unions",
)),
};
match result {
Ok(tokens) => tokens.into(),
Err(e) => e.to_compile_error().into(),
}
}