Skip to main content

nros_core/
lib.rs

1//! Core types, traits, and abstractions for nros
2//!
3//! This crate provides the foundational types and traits for nros:
4//! - `RosMessage` trait for message types
5//! - `RosService` trait for service types
6//! - `RosAction` trait for action types
7//! - `ServiceServer` and `ServiceClient` for service communication
8//! - Time and Duration types
9//! - Error types
10
11#![no_std]
12
13#[cfg(feature = "std")]
14extern crate std;
15
16// `std` implies the `alloc` crate; pull it in for either so the `heap`
17// re-export (used by generated `mode = "heap"` message fields, RFC-0033) is
18// available whenever an allocator is.
19#[cfg(any(feature = "alloc", feature = "std"))]
20extern crate alloc;
21
22pub mod action;
23pub mod clock;
24pub mod error;
25pub mod lifecycle;
26pub mod logger;
27pub mod message_info;
28pub mod service;
29pub mod time;
30pub mod types;
31
32pub use action::{
33    ActionClient, ActionServer, CancelResponse, GoalId, GoalInfo, GoalResponse, GoalStatus,
34    GoalStatusStamped, RosAction,
35};
36pub use clock::{Clock, ClockType};
37pub use error::{
38    ErrorContext, NanoRosError, NanoRosErrorFilter, NestedError, RclReturnCode, TakeFailedAsNone,
39};
40pub use lifecycle::{LifecycleState, LifecycleTransition, TransitionResult};
41pub use logger::{Logger, OnceFlag};
42pub use message_info::{MessageInfo, PUBLISHER_GID_SIZE, RawMessageInfo};
43pub use service::{ServiceCallback, ServiceClient, ServiceRequest, ServiceResult, ServiceServer};
44pub use time::{Duration, Time};
45pub use types::{BorrowedMessage, RosMessage, RosService};
46
47// Re-export serdes types for convenience
48pub use nros_serdes::{
49    CdrReader, CdrWriter, DeserError, Deserialize, DeserializeBorrowed, LeDecode, LeSliceView,
50    SerError, Serialize,
51};
52
53// Re-export heapless for generated message types
54pub use heapless;
55
56/// Heap-backed containers for generated `mode = "heap"` message fields
57/// (RFC-0033). Available whenever an allocator is (the `alloc` or `std`
58/// feature). Generated code refers to `nros_core::heap::{Vec, String}` so the
59/// same path works in both crate and inline (`build.rs`) codegen modes.
60#[cfg(any(feature = "alloc", feature = "std"))]
61pub mod heap {
62    pub use alloc::{string::String, vec::Vec};
63}