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;
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)]
#(#microservice_modules_and_imports)*
})
.unwrap()
}