mavspec_rust_gen 0.6.7

Rust code generation module for MAVSpec.
Documentation
use mavinspect::protocol::Microservices;
use quote::{format_ident, quote};

use crate::conventions::{microservice_display_name, microservice_mod_name};
use crate::specs::dialects::dialect::microservices::MicroservicesRootModuleSpec;
use crate::specs::Spec;

/// Microservices root module template.
pub fn microservices_root_module(spec: &MicroservicesRootModuleSpec) -> syn::File {
    let microservice_modules_and_imports = spec
        .microservices()
        .iter_names()
        .filter(|(_, msrv)| spec.params().microservices.contains(*msrv))
        .map(|(name, _)| {
            let microservice_mod_name = format_ident!("{}", microservice_mod_name(name));
            let module_doc_comment = format!(
                " MAVLink [{}]({}) microservice.",
                microservice_display_name(name),
                Microservices::doc_link(name).unwrap_or("https://mavlink.io/en/services/")
            );

            quote! {
                #[doc = #module_doc_comment]
                pub mod #microservice_mod_name;
            }
        });

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

        #(#microservice_modules_and_imports)*
    })
    .unwrap()
}