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