rosrust_codegen/
lib.rs
1#![recursion_limit = "1024"]
2
3extern crate proc_macro;
4
5mod alerts;
6mod error;
7mod genmsg;
8mod helpers;
9mod msg;
10mod output_layout;
11mod rosmsg_include;
12
13use proc_macro::TokenStream;
14
15#[proc_macro]
16pub fn rosmsg_include(input: TokenStream) -> TokenStream {
17 let mut messages = Vec::new();
18 let mut next_item = String::new();
19 for item in input {
20 match item.to_string().as_str() {
21 "," => {
22 messages.push(next_item);
23 next_item = String::new();
24 }
25 s => next_item += s,
26 }
27 }
28 let is_internal = next_item == "INTERNAL";
29 let ignore_bad = next_item == "IGNORE_BAD";
30 if !is_internal && !ignore_bad && !next_item.is_empty() {
31 messages.push(next_item);
32 }
33 let message_refs = messages.iter().map(String::as_str).collect::<Vec<&str>>();
34 rosmsg_include::depend_on_messages(&message_refs, is_internal, ignore_bad)
35}