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}