rosrust 0.9.12

Pure Rust implementation of a ROS client library
Documentation
use crossbeam::channel::unbounded;
use ros_message::Duration;

mod util;

mod msg {
    rosrust::rosmsg_include!(rosgraph_msgs / Log);
}

#[test]
fn can_log_once() {
    let _roscore = util::run_roscore_for(util::TestVariant::CanLogOnce);

    rosrust::init("rosout_agg_listener");

    let (tx, rx) = unbounded();

    let _subscriber =
        rosrust::subscribe::<msg::rosgraph_msgs::Log, _>("/rosout_agg", 100, move |data| {
            tx.send((data.level, data.msg)).unwrap();
        })
        .unwrap();

    rosrust::sleep(Duration::from_seconds(1));

    let mut received_messages_counter = 0;

    let rate = rosrust::rate(1.0);
    for _ in 0..10 {
        for item in rx.try_iter() {
            println!("Received message at level {}: {}", item.0, item.1);
            received_messages_counter += 1;
        }

        rosrust::ros_info_once!("info message");
        rate.sleep();
    }

    if received_messages_counter == 0 {
        panic!("Failed to receive data on /rosout_agg");
    } else if received_messages_counter > 1 {
        panic!(
            "Received {} messages, not printed once",
            received_messages_counter
        );
    }
}