ev3dev_lang_rust_derive/
lib.rs

1extern crate proc_macro;
2extern crate proc_macro2;
3extern crate quote;
4extern crate syn;
5
6use proc_macro::TokenStream;
7use quote::quote;
8
9#[proc_macro_derive(Device)]
10pub fn device_macro_derive(input: TokenStream) -> TokenStream {
11    let ast: syn::DeriveInput = syn::parse(input).unwrap();
12
13    let name = &ast.ident;
14
15    let gen = quote! {
16        impl Device for #name {
17            fn get_attribute(&self, name: &str) -> Attribute {
18                self.driver.get_attribute(name)
19            }
20        }
21    };
22    gen.into()
23}
24
25#[proc_macro_derive(Sensor)]
26pub fn sensor_macro_derive(input: TokenStream) -> TokenStream {
27    let ast: syn::DeriveInput = syn::parse(input).unwrap();
28
29    let name = &ast.ident;
30    let gen = quote! {
31        impl Sensor for #name {}
32    };
33    gen.into()
34}