1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
//! ROS 2 interface using RustDDS
//!
//! # Example
//!
//! ```
//! use futures::StreamExt;
//! use ros2_client::*;
//!
//! let context = Context::new().unwrap();
//! let mut node = context
//! .new_node(
//! NodeName::new("/rustdds", "rustdds_listener").unwrap(),
//! NodeOptions::new().enable_rosout(true),
//! )
//! .unwrap();
//!
//! let chatter_topic = node
//! .create_topic(
//! &Name::new("/","topic").unwrap(),
//! MessageTypeName::new("std_msgs", "String"),
//! &ros2_client::DEFAULT_SUBSCRIPTION_QOS,
//! )
//! .unwrap();
//! let chatter_subscription = node
//! .create_subscription::<String>(&chatter_topic, None)
//! .unwrap();
//!
//! let subscription_stream = chatter_subscription
//! .async_stream()
//! .for_each(|result| async {
//! match result {
//! Ok((msg, _)) => println!("I heard: {msg}"),
//! Err(e) => eprintln!("Receive request error: {:?}", e),
//! }
//! });
//!
//! // Since we enabled rosout, let's log something
//! rosout!(
//! node,
//! ros2::LogLevel::Info,
//! "wow. very listening. such topics. much subscribe."
//! );
//!
//! // Uncomment this to execute until interrupted.
//! // --> smol::block_on( subscription_stream );
//! ```
#[macro_use]
extern crate lazy_static;
/// Some builtin datatypes needed for ROS2 communication
/// Some convenience topic infos for ROS2 communication
pub mod builtin_topics;
pub mod action_msgs;
/// Some builtin interfaces for ROS2 communication
pub mod builtin_interfaces;
#[doc(hidden)]
pub mod context;
pub mod unique_identifier_msgs;
pub mod interfaces;
/// ROS 2 Action machinery
pub mod action;
pub mod entities_info;
mod gid;
pub mod log;
pub mod message;
pub mod message_info;
pub mod names;
pub mod parameters;
#[doc(hidden)]
pub mod pubsub;
pub mod service;
mod wide_string;
#[doc(hidden)]
pub(crate) mod node;
// Re-exports from crate root to simplify usage
#[doc(inline)]
pub use context::*;
#[doc(inline)]
pub use message::Message;
#[doc(inline)]
pub use names::{ActionTypeName, MessageTypeName, Name, NodeName, ServiceTypeName};
#[doc(inline)]
pub use message_info::MessageInfo;
#[doc(inline)]
pub use node::*;
#[doc(inline)]
pub use pubsub::*;
#[doc(inline)]
pub use service::{AService, Client, Server, Service, ServiceMapping};
#[doc(inline)]
pub use action::{Action, ActionTypes};
#[doc(inline)]
pub use wide_string::WString;
/// Module for stuff we do not want to export from top level;
pub mod ros2 {
pub use rustdds::{qos::policy, Duration, QosPolicies, QosPolicyBuilder, Timestamp};
//TODO: re-export RustDDS error types until ros2-client defines its own
pub use rustdds::dds::{CreateError, ReadError, WaitError, WriteError};
pub use crate::log::LogLevel;
// TODO: What to do about SecurityError (exists based on feature "security")
pub use crate::names::Name; // import Name as ros2::Name if there is clash
// otherwise
}