embedded_devices_derive/
lib.rs

1//! This crate provides procedural helper macro for embedded-devices
2
3use proc_macro::TokenStream;
4use syn::DeriveInput;
5
6mod derive_measurement;
7mod forward_command_fns;
8mod forward_register_fns;
9mod sensor;
10
11#[proc_macro_attribute]
12pub fn forward_command_fns(args: TokenStream, input: TokenStream) -> TokenStream {
13    match forward_command_fns::forward_command_fns(args.into(), input.into()) {
14        Ok(result) => result.into(),
15        Err(e) => e.into_compile_error().into(),
16    }
17}
18
19#[proc_macro_attribute]
20pub fn forward_register_fns(args: TokenStream, input: TokenStream) -> TokenStream {
21    match forward_register_fns::forward_register_fns(args.into(), input.into()) {
22        Ok(result) => result.into(),
23        Err(e) => e.into_compile_error().into(),
24    }
25}
26
27#[proc_macro_derive(Measurement, attributes(measurement))]
28pub fn derive_measurement(input: TokenStream) -> TokenStream {
29    let input = syn::parse_macro_input!(input as DeriveInput);
30    match derive_measurement::generate(&input) {
31        Ok(result) => result.into(),
32        Err(e) => e.to_compile_error().into(),
33    }
34}
35
36#[proc_macro_attribute]
37pub fn sensor(args: TokenStream, input: TokenStream) -> TokenStream {
38    match sensor::sensor(args.into(), input.into()) {
39        Ok(result) => result.into(),
40        Err(e) => e.into_compile_error().into(),
41    }
42}