1extern crate proc_macro;
8extern crate proc_macro2;
9
10use quote::quote;
11
12mod cef_extensions_trait;
13mod cef_header_traits;
14mod helpers;
15
16use crate::proc_macro::TokenStream;
17use cef_extensions_trait::implement_extensions_trait;
18use cef_header_traits::implement_header_trait;
19use std::convert::From;
20use syn::{parse_macro_input, DeriveInput};
21
22#[proc_macro_derive(ToCef)]
27pub fn derive_to_cef(input: TokenStream) -> TokenStream {
28 let input = parse_macro_input!(input as DeriveInput);
29
30 let name = &input.ident;
32
33 let generics = input.generics;
35 let (impl_generics, ty_generics, where_clause) = generics.split_for_impl();
36
37 let to_cef_impl = quote! {
39 impl #impl_generics rust_cef::ToCef for #name #ty_generics #where_clause {}
40 };
41
42 TokenStream::from(to_cef_impl)
43}
44
45#[proc_macro_derive(CefHeaderVersion, attributes(cef_values, cef_inherit, cef_field))]
46pub fn derive_cef_header_version(item_tokens: TokenStream) -> TokenStream {
47 implement_header_trait("CefHeaderVersion", item_tokens)
48}
49
50#[proc_macro_derive(CefHeaderDeviceVendor, attributes(cef_values, cef_inherit, cef_field))]
51pub fn derive_cef_header_device_vendor(item_tokens: TokenStream) -> TokenStream {
52 implement_header_trait("CefHeaderDeviceVendor", item_tokens)
53}
54
55#[proc_macro_derive(CefHeaderDeviceProduct, attributes(cef_values, cef_inherit, cef_field))]
56pub fn derive_cef_header_device_product(item_tokens: TokenStream) -> TokenStream {
57 implement_header_trait("CefHeaderDeviceProduct", item_tokens)
58}
59
60#[proc_macro_derive(CefHeaderDeviceVersion, attributes(cef_values, cef_inherit, cef_field))]
61pub fn derive_cef_header_device_version(item_tokens: TokenStream) -> TokenStream {
62 implement_header_trait("CefHeaderDeviceVersion", item_tokens)
63}
64#[proc_macro_derive(
65 CefHeaderDeviceEventClassID,
66 attributes(cef_values, cef_inherit, cef_field)
67)]
68pub fn derive_cef_header_device_event_class_id(item_tokens: TokenStream) -> TokenStream {
69 implement_header_trait("CefHeaderDeviceEventClassID", item_tokens)
70}
71#[proc_macro_derive(CefHeaderName, attributes(cef_values, cef_inherit, cef_field))]
72pub fn derive_cef_header_name(item_tokens: TokenStream) -> TokenStream {
73 implement_header_trait("CefHeaderName", item_tokens)
74}
75#[proc_macro_derive(CefHeaderSeverity, attributes(cef_values, cef_inherit, cef_field))]
76pub fn derive_cef_header_severity(item_tokens: TokenStream) -> TokenStream {
77 implement_header_trait("CefHeaderSeverity", item_tokens)
78}
79
80#[proc_macro_derive(
81 CefExtensions,
82 attributes(cef_ext_field, cef_ext_gobble, cef_ext_values)
83)]
84pub fn derive_cef_extensions(input: TokenStream) -> TokenStream {
85 implement_extensions_trait(input)
86}