pub mod action_msgs;
pub mod builtin_interfaces;
pub mod example_interfaces;
pub mod example_interfaces_action;
pub mod geometry_msgs;
pub mod sensor_msgs;
pub mod std_msgs;
pub mod unique_identifier_msgs;
pub use action_msgs::{
goal_status, CancelGoal, CancelGoalRequest, CancelGoalResponse, GoalInfo, GoalStatus,
GoalStatusArray,
};
pub use builtin_interfaces::{Duration, Time};
pub use example_interfaces::{AddTwoInts, AddTwoIntsRequest, AddTwoIntsResponse};
pub use example_interfaces_action::{Fibonacci, FibonacciFeedback, FibonacciGoal, FibonacciResult};
pub use geometry_msgs::{Point, Pose, Quaternion, Twist, Vector3};
pub use sensor_msgs::{Imu, JointState};
pub use std_msgs::{Bool, Header, StdString};
pub use unique_identifier_msgs::Uuid;
use crate::protocol::dds::api::error::DdsApiError;
use crate::protocol::dds::byte_cursor::{ByteCursor, ByteWriter, Endianness};
const CDR_LE_HEADER: [u8; 4] = [0x00, 0x01, 0x00, 0x00];
pub(crate) fn make_writer(buf: &mut [u8]) -> Result<ByteWriter<'_>, DdsApiError> {
if buf.len() < 4 {
return Err(DdsApiError::PayloadBufferTooSmall);
}
buf[..4].copy_from_slice(&CDR_LE_HEADER);
Ok(ByteWriter::new(&mut buf[4..], Endianness::Little))
}
pub(crate) fn make_cursor(payload: &[u8]) -> Result<ByteCursor<'_>, DdsApiError> {
if payload.len() < 4 {
return Err(DdsApiError::Serialization(
"payload shorter than CDR header",
));
}
let endianness = if payload[1] & 0x01 != 0 {
Endianness::Little
} else {
Endianness::Big
};
Ok(ByteCursor::new(&payload[4..], endianness))
}