Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ros2-bridge action attempt #567

Merged
merged 6 commits into from
Jul 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions libraries/extensions/ros2-bridge/msg-gen/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

pub use crate::parser::get_packages;

pub fn gen<P>(paths: &[P], create_cxx_bridge: bool) -> proc_macro2::TokenStream

Check warning on line 19 in libraries/extensions/ros2-bridge/msg-gen/src/lib.rs

View workflow job for this annotation

GitHub Actions / Clippy

the function has a cognitive complexity of (35/25)
where
P: AsRef<Path>,
{
Expand All @@ -29,6 +29,12 @@
let mut service_impls = Vec::new();
let mut service_creation_defs = Vec::new();
let mut service_creation_impls = Vec::new();

let mut action_defs = Vec::new();
let mut action_impls = Vec::new();
let mut action_creation_defs = Vec::new();
let mut action_creation_impls = Vec::new();

let mut aliases = Vec::new();
for package in &packages {
for message in &package.messages {
Expand All @@ -54,6 +60,20 @@
}
}

for action in &package.actions {
let (def, imp) = action.struct_token_stream(&package.name, create_cxx_bridge);
action_defs.push(def);
action_impls.push(imp);
if create_cxx_bridge {
let (action_creation_def, action_creation_impl) =
action.cxx_action_creation_functions(&package.name);
let action_creation_def = quote! { #action_creation_def };
let action_creation_impl = quote! { #action_creation_impl };
action_creation_defs.push(action_creation_def);
action_creation_impls.push(action_creation_impl);
}
}

aliases.push(package.aliases_token_stream());
}

Expand All @@ -73,9 +93,11 @@
fn init_ros2_context() -> Result<Box<Ros2Context>>;
fn new_node(self: &Ros2Context, name_space: &str, base_name: &str) -> Result<Box<Ros2Node>>;
fn qos_default() -> Ros2QosPolicies;
fn actionqos_default() -> Ros2ActionClientQosPolicies;

#(#message_topic_defs)*
#(#service_creation_defs)*
#(#action_creation_defs)*
}

#[derive(Debug, Clone)]
Expand All @@ -89,6 +111,15 @@
pub keep_last: i32,
}

#[derive(Debug, Clone)]
pub struct Ros2ActionClientQosPolicies {
pub goal_service: Ros2QosPolicies,
pub result_service: Ros2QosPolicies,
pub cancel_service: Ros2QosPolicies,
pub feedback_subscription: Ros2QosPolicies,
pub status_subscription: Ros2QosPolicies,
}

/// DDS 2.2.3.4 DURABILITY
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum Ros2Durability {
Expand Down Expand Up @@ -150,6 +181,16 @@
ffi::Ros2QosPolicies::new(None, None, None, None, None, None, None)
}

fn actionqos_default() -> ffi::Ros2ActionClientQosPolicies {
ffi::Ros2ActionClientQosPolicies::new(
Some(qos_default()),
Some(qos_default()),
Some(qos_default()),
Some(qos_default()),
Some(qos_default())
)
}

impl ffi::Ros2QosPolicies {
pub fn new(
durability: Option<ffi::Ros2Durability>,
Expand Down Expand Up @@ -229,6 +270,36 @@
}
}
}

impl ffi::Ros2ActionClientQosPolicies {
pub fn new(
goal_service: Option<ffi::Ros2QosPolicies>,
result_service: Option<ffi::Ros2QosPolicies>,
cancel_service: Option<ffi::Ros2QosPolicies>,
feedback_subscription: Option<ffi::Ros2QosPolicies>,
status_subscription: Option<ffi::Ros2QosPolicies>,
) -> Self {
Self {
goal_service: goal_service.unwrap_or_else(|| ffi::Ros2QosPolicies::new(None, None, None, None, None, None, None)),
result_service: result_service.unwrap_or_else(|| ffi::Ros2QosPolicies::new(None, None, None, None, None, None, None)),
cancel_service: cancel_service.unwrap_or_else(|| ffi::Ros2QosPolicies::new(None, None, None, None, None, None, None)),
feedback_subscription: feedback_subscription.unwrap_or_else(|| ffi::Ros2QosPolicies::new(None, None, None, None, None, None, None)),
status_subscription: status_subscription.unwrap_or_else(|| ffi::Ros2QosPolicies::new(None, None, None, None, None, None, None)),
}
}
}

impl From<ffi::Ros2ActionClientQosPolicies> for ros2_client::action::ActionClientQosPolicies {
fn from(value: ffi::Ros2ActionClientQosPolicies) -> Self {
ros2_client::action::ActionClientQosPolicies {
goal_service: value.goal_service.into(),
result_service: value.result_service.into(),
cancel_service: value.cancel_service.into(),
feedback_subscription: value.feedback_subscription.into(),
status_subscription: value.status_subscription.into(),
}
}
}
},
)
} else {
Expand All @@ -253,6 +324,7 @@

#(#shared_type_defs)*
#(#service_defs)*
#(#action_defs)*
}


Expand All @@ -273,9 +345,11 @@
#cxx_bridge_impls
#(#message_topic_impls)*
#(#service_creation_impls)*
#(#action_creation_impls)*


#(#service_impls)*
#(#action_impls)*

#(#aliases)*
}
Expand Down
Loading
Loading