2017-12-21 12:32:14 +00:00
|
|
|
#![recursion_limit="128"]
|
|
|
|
|
2019-07-02 13:27:08 +00:00
|
|
|
#[macro_use]
|
|
|
|
extern crate synstructure;
|
2017-12-16 20:58:18 +00:00
|
|
|
#[macro_use]
|
|
|
|
extern crate quote;
|
2019-07-02 13:27:08 +00:00
|
|
|
extern crate proc_macro2;
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2019-07-02 13:27:08 +00:00
|
|
|
mod rrdata;
|
2017-12-16 20:58:18 +00:00
|
|
|
mod dns_packet_data;
|
2017-12-21 12:32:14 +00:00
|
|
|
mod dns_text_data;
|
2019-07-04 21:54:43 +00:00
|
|
|
mod native_enum;
|
|
|
|
mod native_flags;
|
2017-12-16 20:58:18 +00:00
|
|
|
|
2019-07-02 13:27:08 +00:00
|
|
|
decl_derive!([DnsPacketData] => dns_packet_data::derive);
|
|
|
|
decl_derive!([DnsTextData] => dns_text_data::derive);
|
|
|
|
decl_derive!([RRData, attributes(RRTypeName, RRClass)] => rrdata::rrdata_derive);
|
2019-07-04 21:54:43 +00:00
|
|
|
decl_attribute!([native_enum] => native_enum::attribute_native_enum);
|
|
|
|
decl_attribute!([native_flags] => native_flags::attribute_native_flags);
|
2019-07-02 13:27:08 +00:00
|
|
|
|
|
|
|
fn attr_get_single_list_arg(attr_meta: &syn::Meta) -> proc_macro2::TokenStream {
|
|
|
|
match attr_meta {
|
|
|
|
syn::Meta::Word(_) => {
|
|
|
|
panic!("{:?} attribute requires an argument", attr_meta.name())
|
|
|
|
},
|
|
|
|
syn::Meta::List(l) => {
|
|
|
|
if l.nested.len() != 1 {
|
|
|
|
panic!("{:?} attribute requires exactly one argument", attr_meta.name());
|
2017-12-21 12:32:14 +00:00
|
|
|
}
|
2019-07-02 13:27:08 +00:00
|
|
|
let arg = *l.nested.first().unwrap().value();
|
2017-12-21 12:32:14 +00:00
|
|
|
quote!{#arg}
|
|
|
|
},
|
2019-07-02 13:27:08 +00:00
|
|
|
syn::Meta::NameValue(nv) => {
|
|
|
|
let lit = &nv.lit;
|
|
|
|
quote!{#lit}
|
2017-12-21 12:32:14 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-07-02 13:27:08 +00:00
|
|
|
/*
|
2017-12-16 20:58:18 +00:00
|
|
|
#[proc_macro_derive(DnsPacketData)]
|
|
|
|
pub fn derive_dns_packet_data(input: TokenStream) -> TokenStream {
|
|
|
|
let s = input.to_string();
|
|
|
|
|
|
|
|
let ast = syn::parse_derive_input(&s).unwrap();
|
|
|
|
|
2017-12-21 12:32:14 +00:00
|
|
|
let gen = dns_packet_data::build(&ast);
|
|
|
|
|
|
|
|
gen.parse().unwrap()
|
|
|
|
}
|
|
|
|
|
|
|
|
#[proc_macro_derive(DnsTextData)]
|
|
|
|
pub fn derive_dns_text_data(input: TokenStream) -> TokenStream {
|
|
|
|
let s = input.to_string();
|
|
|
|
|
|
|
|
let ast = syn::parse_derive_input(&s).unwrap();
|
|
|
|
|
|
|
|
let gen = dns_text_data::build(&ast);
|
2017-12-16 20:58:18 +00:00
|
|
|
|
|
|
|
gen.parse().unwrap()
|
|
|
|
}
|
|
|
|
|
2019-07-02 13:27:08 +00:00
|
|
|
*/
|