use mt_pubsub::{Node, NodeConfig, Qos};
use ros2_interfaces_jazzy_rkyv::std_msgs::msg;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
mt_sea::init_logging();
let be_node = Node::create(NodeConfig::new("be_publisher").mode(Qos::BestEffort)).await?;
let _pubber = be_node
.create_publisher::<msg::String>("/sensor".to_owned(), Qos::BestEffort)
.await?;
let reliable_node = Node::create(NodeConfig::new("reliable_subscriber")).await?;
let result = reliable_node
.create_subscriber::<msg::String>("/sensor".to_owned(), 10, Qos::Reliable)
.await;
match &result {
Err(e) => eprintln!("Expected error: {e}"),
Ok(_) => eprintln!("No error — publisher was not registered yet (race). Try again."),
}
let mut subber = reliable_node
.create_subscriber::<msg::String>("/sensor".to_owned(), 10, Qos::BestEffort)
.await?;
println!("BE subscription succeeded. Waiting for messages...");
while let Some(msg) = subber.next().await {
println!("Got: {}", msg.data);
}
Ok(())
}