Browse Source

Move code generation to `msg-gen` crate

tags/v0.3.3-rc1
Philipp Oppermann 2 years ago
parent
commit
f9cfedc302
Failed to extract signature
2 changed files with 66 additions and 58 deletions
  1. +1
    -58
      libraries/extensions/ros2-bridge/msg-gen-macro/src/lib.rs
  2. +65
    -0
      libraries/extensions/ros2-bridge/msg-gen/src/lib.rs

+ 1
- 58
libraries/extensions/ros2-bridge/msg-gen-macro/src/lib.rs View File

@@ -63,63 +63,6 @@ pub fn msg_include_all(input: TokenStream) -> TokenStream {
.map(Path::new)
.collect::<Vec<_>>();

let message_structs = get_packages(&paths)
.unwrap()
.iter()
.map(|v| v.message_structs(config.create_cxx_bridge))
.collect::<Vec<_>>();
let message_struct_defs = message_structs.iter().map(|(s, _)| s);
let message_struct_impls = message_structs.iter().map(|(_, i)| i);

let aliases = get_packages(&paths)
.unwrap()
.iter()
.map(|v| v.aliases_token_stream())
.collect::<Vec<_>>();
let packages = get_packages(&paths)
.unwrap()
.iter()
.map(|v| v.token_stream(config.create_cxx_bridge))
.collect::<Vec<_>>();

let (attributes, imports) = if config.create_cxx_bridge {
(quote! { #[cxx::bridge] }, quote! {})
} else {
(
quote! {},
quote! {
use serde::{Serialize, Deserialize};
},
)
};

(quote! {
#attributes
pub mod ffi {
#imports

#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct U16String {
chars: Vec<u16>,
}

#(#message_struct_defs)*
}


impl crate::_core::InternalDefault for ffi::U16String {
fn _default() -> Self {
Default::default()
}
}

#(#message_struct_impls)*

#(#aliases)*


// #(#packages)*
})
.into()
dora_ros2_bridge_msg_gen::gen(&paths, config.create_cxx_bridge).into()
}
}

+ 65
- 0
libraries/extensions/ros2-bridge/msg-gen/src/lib.rs View File

@@ -7,7 +7,72 @@
clippy::nursery
)]

use std::path::Path;

use quote::quote;

pub mod parser;
pub mod types;

pub use crate::parser::get_packages;

pub fn gen(paths: &[&Path], create_cxx_bridge: bool) -> proc_macro2::TokenStream {
let message_structs = get_packages(&paths)
.unwrap()
.iter()
.map(|v| v.message_structs(create_cxx_bridge))
.collect::<Vec<_>>();
let message_struct_defs = message_structs.iter().map(|(s, _)| s);
let message_struct_impls = message_structs.iter().map(|(_, i)| i);

let aliases = get_packages(&paths)
.unwrap()
.iter()
.map(|v| v.aliases_token_stream())
.collect::<Vec<_>>();
let packages = get_packages(&paths)
.unwrap()
.iter()
.map(|v| v.token_stream(create_cxx_bridge))
.collect::<Vec<_>>();

let (attributes, imports) = if create_cxx_bridge {
(quote! { #[cxx::bridge] }, quote! {})
} else {
(
quote! {},
quote! {
use serde::{Serialize, Deserialize};
},
)
};

(quote! {
#attributes
pub mod ffi {
#imports

#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct U16String {
chars: Vec<u16>,
}

#(#message_struct_defs)*
}


impl crate::_core::InternalDefault for ffi::U16String {
fn _default() -> Self {
Default::default()
}
}

#(#message_struct_impls)*

#(#aliases)*


// #(#packages)*
})
.into()
}

Loading…
Cancel
Save