mavspec_rust_gen 0.6.7

Rust code generation module for MAVSpec.
Documentation
use crate::conventions::dialect_enum_name;
use quote::{format_ident, quote};

use crate::specs::dialects::DialectsRootModuleSpec;

/// Dialects root module template.
pub fn dialects_root_module(spec: &DialectsRootModuleSpec) -> syn::File {
    let dialect_modules = spec.module_names().iter().map(|name| {
        let name = format_ident!("{}", name);
        quote! {
            pub mod #name;
        }
    });

    let dialect_enum_imports = spec.module_names().iter().map(|name| {
        let module_name = format_ident!("{}", name);
        let dialect_enum_ident = format_ident!("{}", dialect_enum_name(name));

        quote! {
            #[doc(inline)]
            pub use #module_name::#dialect_enum_ident;
        }
    });

    syn::parse2(quote! {
        #![warn(missing_docs)]
        #![deny(rustdoc::broken_intra_doc_links)]
        //! # Autogenerated MAVLink dialects
        //!
        //! > *Generated by [`MAVSpec`](https://gitlab.com/mavka/libs/mavspec)*
        //!
        //! Each dialect is packaged into a module with corresponding (`snake_cased`) name.

        #(#dialect_modules)*

        #(#dialect_enum_imports)*
    })
    .unwrap()
}