Generate one source file per ros package

This commit is contained in:
Martin Dahl 2020-03-18 11:19:37 +01:00
parent c73175238e
commit 4d1d223ece
3 changed files with 17 additions and 11 deletions

View File

@ -13,7 +13,7 @@ fn main() {
let msgs = as_map(&msgs_list);
let mut codegen = String::new();
let mut modules = String::new();
for (module, prefixes) in &msgs {
println!(
@ -26,8 +26,10 @@ fn main() {
);
println!("cargo:rustc-link-lib=dylib={}__rosidl_generator_c", module);
codegen.push_str(&format!("pub mod {} {{\n", module));
modules.push_str(&format!("pub mod {};\n", module));
let mut codegen = String::new();
for (prefix, msgs) in prefixes {
codegen.push_str(&format!(" pub mod {} {{\n", prefix));
codegen.push_str(" use super::super::*;\n");
@ -40,18 +42,20 @@ fn main() {
codegen.push_str(" }\n");
}
codegen.push_str("}\n");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
let mod_fn = out_path.join(&format!("{}.rs", module));
let mut f = File::create(mod_fn).unwrap();
write!(f, "{}", codegen).unwrap();
}
let untyped_helper = generate_untyped_helper(&msgs_list);
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
let msgs_fn = out_path.join("generated_msgs.rs");
let untyped_fn = out_path.join("generated_untyped_helper.rs");
let msgs_fn = out_path.join("_r2r_generated_msgs.rs");
let untyped_fn = out_path.join("_r2r_generated_untyped_helper.rs");
let mut f = File::create(msgs_fn).unwrap();
write!(f, "{}", codegen).unwrap();
write!(f, "{}", modules).unwrap();
let mut f = File::create(untyped_fn).unwrap();
write!(f, "{}", untyped_helper).unwrap();
}

View File

@ -102,7 +102,8 @@ std_msgs/msg/Bool
x/y
std_msgs/msg/String
";
let parsed = parse_msgs(msgs);
let msgs = msgs.lines().map(|l|l.to_string()).collect();
let parsed = parse_msgs(&msgs);
assert_eq!(parsed[0].module, "std_msgs");
assert_eq!(parsed[0].prefix, "msg");
assert_eq!(parsed[0].name, "Bool");
@ -118,7 +119,8 @@ std_msgs/msg/Bool
x/y
std_msgs/msg/String
";
let parsed = parse_msgs(msgs);
let msgs: Vec<String> = msgs.lines().map(|l|l.to_string()).collect();
let parsed = parse_msgs(&msgs);
let map = as_map(&parsed);
assert_eq!(map.get("std_msgs").unwrap().get("msg").unwrap()[0], "Bool");

View File

@ -1,5 +1,5 @@
include!(concat!(env!("OUT_DIR"), "/generated_msgs.rs"));
include!(concat!(env!("OUT_DIR"), "/generated_untyped_helper.rs"));
include!(concat!(env!("OUT_DIR"), "/_r2r_generated_msgs.rs"));
include!(concat!(env!("OUT_DIR"), "/_r2r_generated_untyped_helper.rs"));
#[macro_use] extern crate failure_derive;
use serde::{Deserialize, Serialize};