mavlink_bindgen/
binder.rs

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
use quote::{format_ident, quote};
use std::io::Write;

pub fn generate<W: Write>(modules: Vec<&str>, out: &mut W) {
    let modules_tokens = modules.into_iter().map(|module| {
        let module_ident = format_ident!("{}", module);

        quote! {
            #[allow(non_camel_case_types)]
            #[allow(clippy::derive_partial_eq_without_eq)]
            #[allow(clippy::field_reassign_with_default)]
            #[allow(non_snake_case)]
            #[allow(clippy::unnecessary_cast)]
            #[allow(clippy::bad_bit_mask)]
            #[cfg(feature = #module)]
            pub mod #module_ident;
        }
    });

    let tokens = quote! {
        #(#modules_tokens)*
    };

    writeln!(out, "{tokens}").unwrap();
}