Oops. Bug
This commit is contained in:
parent
f0597576dc
commit
8ec9d1bedb
|
|
@ -211,13 +211,20 @@ fn untyped_serialize_helper(typename: &str) -> Result<fn(json: serde_json::Value
|
|||
}
|
||||
se_helper.push_str(&format!("return Err(())\n}}"));
|
||||
|
||||
let mut alloc_helper = format!("fn untyped_alloc_helper(typename: &str) -> Result<*mut std::os::raw::c_void, ()> {{");
|
||||
for msg in msgs {
|
||||
alloc_helper.push_str(&generate_untyped_alloc_helper(&msg.module, &msg.prefix, &msg.name));
|
||||
}
|
||||
alloc_helper.push_str(&format!("return Err(())\n}}"));
|
||||
|
||||
|
||||
let mut dealloc_helper = format!("fn untyped_dealloc_helper(typename: &str) -> Result<fn(*mut std::os::raw::c_void), ()> {{");
|
||||
for msg in msgs {
|
||||
dealloc_helper.push_str(&generate_untyped_dealloc_helper(&msg.module, &msg.prefix, &msg.name));
|
||||
}
|
||||
dealloc_helper.push_str(&format!("return Err(())\n}}"));
|
||||
|
||||
format!("{} \n\n {} \n\n {} \n\n {} \n\n", ts_helper, ds_helper, se_helper, dealloc_helper)
|
||||
format!("{} \n\n {} \n\n {} \n\n {} \n\n {} \n\n", ts_helper, ds_helper, se_helper, alloc_helper, dealloc_helper)
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -268,6 +275,19 @@ pub fn generate_untyped_serialize_helper(module_: &str, prefix_: &str, name_: &s
|
|||
}}", typename = typename, rustname = rustname)
|
||||
}
|
||||
|
||||
|
||||
pub fn generate_untyped_alloc_helper(module_: &str, prefix_: &str, name_: &str) -> String {
|
||||
let typename = format!("{}/{}/{}", module_, prefix_, name_);
|
||||
let rustname = format!("{}::{}::{}", module_, prefix_, name_);
|
||||
|
||||
format!("
|
||||
if typename == \"{typename}\" {{
|
||||
return Ok({rustname}::create_msg() as *mut std::os::raw::c_void);
|
||||
}}
|
||||
", typename = typename, rustname = rustname)
|
||||
}
|
||||
|
||||
|
||||
pub fn generate_untyped_dealloc_helper(module_: &str, prefix_: &str, name_: &str) -> String {
|
||||
let typename = format!("{}/{}/{}", module_, prefix_, name_);
|
||||
let rustname = format!("{}::{}::{}", module_, prefix_, name_);
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@ struct WrappedSubUntyped {
|
|||
rcl_handle: rcl_subscription_t,
|
||||
callback: Box<dyn FnMut(serde_json::Value) -> ()>,
|
||||
serialize: Box<dyn FnMut(*const std::os::raw::c_void) -> serde_json::Value>,
|
||||
dealloc: Box<dyn FnMut(*mut std::os::raw::c_void) -> ()>,
|
||||
rcl_msg: *mut std::os::raw::c_void,
|
||||
}
|
||||
|
||||
|
|
@ -184,6 +185,7 @@ impl Sub for WrappedSubUntyped
|
|||
unsafe {
|
||||
rcl_subscription_fini(&mut self.rcl_handle, node);
|
||||
}
|
||||
(self.dealloc)(self.rcl_msg); // manually delete message
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -386,12 +388,14 @@ impl Node {
|
|||
let ts = untyped_ts_helper(topic_type)?;
|
||||
let de = untyped_deserialize_helper(topic_type)?;
|
||||
let subscription_handle = self.create_subscription_helper(topic, ts)?;
|
||||
let dealloc = untyped_dealloc_helper(topic_type)?;
|
||||
|
||||
let ws = WrappedSubUntyped {
|
||||
rcl_handle: subscription_handle,
|
||||
rcl_msg: unsafe { std_msgs__msg__String__create() as *mut _ as *mut std::os::raw::c_void },
|
||||
rcl_msg: untyped_alloc_helper(topic_type)?,
|
||||
callback: callback,
|
||||
serialize: Box::new(de),
|
||||
dealloc: Box::new(dealloc),
|
||||
};
|
||||
self.subs.push(Box::new(ws));
|
||||
Ok(self.subs.last().unwrap().handle()) // hmm...
|
||||
|
|
|
|||
Loading…
Reference in New Issue