rclrust_msg_gen/
lib.rs

1#![warn(
2    rust_2018_idioms,
3    elided_lifetimes_in_paths,
4    clippy::all,
5    clippy::nursery
6)]
7
8mod parser;
9mod types;
10
11use std::path::Path;
12
13use proc_macro::TokenStream;
14use quote::quote;
15
16use crate::parser::get_packages;
17
18#[proc_macro]
19pub fn msg_include_all(_input: TokenStream) -> TokenStream {
20    let ament_prefix_paths =
21        std::env::var("AMENT_PREFIX_PATH").expect("$AMENT_PREFIX_PATH is supposed to be set.");
22
23    let paths = ament_prefix_paths
24        .split(':')
25        .map(Path::new)
26        .collect::<Vec<_>>();
27
28    let packages = get_packages(&paths)
29        .unwrap()
30        .iter()
31        .map(|v| v.token_stream())
32        .collect::<Vec<_>>();
33
34    (quote! {
35        #(#packages)*
36    })
37    .into()
38}