use hiroz::{Builder, Result, context::ZContextBuilder, lifecycle::CallbackReturn};
use hiroz_msgs::std_msgs::String as RosString;
fn main() -> Result<()> {
let ctx = ZContextBuilder::default().build()?;
let mut node = ctx.create_lifecycle_node("lifecycle_talker").build()?;
node.on_configure = Box::new(|_prev| {
println!("[configure] loading parameters");
CallbackReturn::Success
});
node.on_activate = Box::new(|_prev| {
println!("[activate] publisher enabled");
CallbackReturn::Success
});
node.on_deactivate = Box::new(|_prev| {
println!("[deactivate] publisher paused");
CallbackReturn::Success
});
node.on_cleanup = Box::new(|_prev| {
println!("[cleanup] releasing resources");
CallbackReturn::Success
});
let pub_ = node.create_publisher::<RosString>("chatter")?;
node.configure()?;
pub_.publish(&RosString {
data: "dropped (inactive)".to_string(),
})?;
node.activate()?;
for i in 0..5 {
let msg = RosString {
data: format!("hello {i}"),
};
pub_.publish(&msg)?;
println!("published: {}", msg.data);
}
node.deactivate()?;
node.cleanup()?;
node.shutdown()?;
println!("node finalized");
Ok(())
}