Browse Source

Add config option to msg gen macro to output `cxx_bridge` attribute

tags/v0.3.3-rc1
Philipp Oppermann 2 years ago
parent
commit
f0075d8e92
Failed to extract signature
4 changed files with 70 additions and 28 deletions
  1. +24
    -24
      Cargo.lock
  2. +1
    -1
      libraries/extensions/ros2-bridge/msg-gen-macro/Cargo.toml
  3. +36
    -2
      libraries/extensions/ros2-bridge/msg-gen-macro/src/lib.rs
  4. +9
    -1
      libraries/extensions/ros2-bridge/msg-gen/src/types/package.rs

+ 24
- 24
Cargo.lock View File

@@ -524,7 +524,7 @@ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -954,7 +954,7 @@ dependencies = [
"heck 0.4.1",
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -1264,7 +1264,7 @@ dependencies = [
"proc-macro2",
"quote",
"scratch",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -1281,7 +1281,7 @@ checksum = "2fa16a70dd58129e4dfffdff535fb1bce66673f7bbeec4a5a1765a504e1ccd84"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -1736,7 +1736,7 @@ dependencies = [
"proc-macro2",
"quote",
"regex",
"syn 1.0.109",
"syn 2.0.41",
"thiserror",
]

@@ -1914,7 +1914,7 @@ checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -2219,7 +2219,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -2289,7 +2289,7 @@ checksum = "ba330b70a5341d3bc730b8e205aaee97ddab5d9c448c4f51a7c2d924266fa8f9"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -3516,7 +3516,7 @@ checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -3948,7 +3948,7 @@ dependencies = [
"pest_meta",
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -3989,7 +3989,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -4288,7 +4288,7 @@ dependencies = [
"proc-macro2",
"pyo3-macros-backend",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -4300,7 +4300,7 @@ dependencies = [
"heck 0.4.1",
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -4990,7 +4990,7 @@ checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -5012,7 +5012,7 @@ checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -5243,7 +5243,7 @@ checksum = "7d395866cb6778625150f77a430cc0af764ce0300f6a3d3413477785fa34b6c7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -5326,9 +5326,9 @@ dependencies = [

[[package]]
name = "syn"
version = "2.0.38"
version = "2.0.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
checksum = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269"
dependencies = [
"proc-macro2",
"quote",
@@ -5462,7 +5462,7 @@ checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -5586,7 +5586,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -5693,7 +5693,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -5902,7 +5902,7 @@ checksum = "f7e1ba1f333bd65ce3c9f27de592fcbc256dafe3af2717f56d7c87761fbaccf4"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
]

[[package]]
@@ -6011,7 +6011,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
"wasm-bindgen-shared",
]

@@ -6045,7 +6045,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.38",
"syn 2.0.41",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]


+ 1
- 1
libraries/extensions/ros2-bridge/msg-gen-macro/Cargo.toml View File

@@ -12,7 +12,7 @@ nom = "7"
proc-macro2 = "1.0"
quote = "1.0"
regex = "1"
syn = "1.0"
syn = { version = "2.0.41", features = ["parsing"] }
thiserror = "1.0"
dora-ros2-bridge-msg-gen = { path = "../msg-gen" }



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

@@ -12,9 +12,43 @@ use std::path::Path;
use dora_ros2_bridge_msg_gen::get_packages;
use proc_macro::TokenStream;
use quote::quote;
use syn::{punctuated::Punctuated, MetaNameValue, Token};

struct Config {
create_cxx_bridge: bool,
}

impl syn::parse::Parse for Config {
fn parse(input: syn::parse::ParseStream<'_>) -> syn::Result<Self> {
let punctuated = Punctuated::<MetaNameValue, Token![,]>::parse_terminated(input)?;

let mut config = Self {
create_cxx_bridge: false,
};

for item in &punctuated {
let ident = item.path.require_ident()?;
if ident == "cxx_bridge" {
let syn::Expr::Lit(lit) = &item.value else {
return Err(syn::Error::new_spanned(&item.value, "invalid value, expected bool"));
};
let syn::Lit::Bool(b) = &lit.lit else {
return Err(syn::Error::new_spanned(&lit.lit, "invalid value, expected bool"));
};
config.create_cxx_bridge = b.value;
} else {
return Err(syn::Error::new_spanned(&item.path, "invalid argument"));
}
}

Ok(config)
}
}

#[proc_macro]
pub fn msg_include_all(_input: TokenStream) -> TokenStream {
pub fn msg_include_all(input: TokenStream) -> TokenStream {
let config = syn::parse_macro_input!(input as Config);

let ament_prefix_path = std::env!("DETECTED_AMENT_PREFIX_PATH").trim();
if ament_prefix_path.is_empty() {
quote! {
@@ -32,7 +66,7 @@ pub fn msg_include_all(_input: TokenStream) -> TokenStream {
let packages = get_packages(&paths)
.unwrap()
.iter()
.map(|v| v.token_stream())
.map(|v| v.token_stream(config.create_cxx_bridge))
.collect::<Vec<_>>();

(quote! {


+ 9
- 1
libraries/extensions/ros2-bridge/msg-gen/src/types/package.rs View File

@@ -71,13 +71,21 @@ impl Package {
}
}

pub fn token_stream(&self) -> impl ToTokens {
pub fn token_stream(&self, gen_cxx_bridge: bool) -> impl ToTokens {
let name = Ident::new(&self.name, Span::call_site());
let messages_block = self.messages_block();
let services_block = self.services_block();
let actions_block = self.actions_block();

let attributes = if gen_cxx_bridge {
let namespace = &self.name;
quote! { #[cxx::bridge(namespace = #namespace)] }
} else {
quote! {}
};

quote! {
#attributes
pub mod #name {
#messages_block
#services_block


Loading…
Cancel
Save