use std::time::SystemTime;
use crate::{rcl_bindings::*, timestamp_to_system_time};
#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct ServiceInfo {
pub source_timestamp: Option<SystemTime>,
pub received_timestamp: Option<SystemTime>,
pub request_id: RequestId,
}
impl ServiceInfo {
pub(crate) fn from_rmw_service_info(rmw_service_info: &rmw_service_info_t) -> Self {
Self {
source_timestamp: timestamp_to_system_time(rmw_service_info.source_timestamp),
received_timestamp: timestamp_to_system_time(rmw_service_info.received_timestamp),
request_id: RequestId::from_rmw_request_id(&rmw_service_info.request_id),
}
}
pub(crate) fn zero_initialized_rmw() -> rmw_service_info_t {
rmw_service_info_t {
source_timestamp: 0,
received_timestamp: 0,
request_id: RequestId::zero_initialized_rmw(),
}
}
}
#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct RequestId {
#[cfg(ros_distro = "humble")]
pub writer_guid: [i8; 16usize],
#[cfg(not(ros_distro = "humble"))]
pub writer_guid: [u8; 16usize],
pub sequence_number: i64,
}
impl RequestId {
pub(crate) fn from_rmw_request_id(rmw_request_id: &rmw_request_id_t) -> Self {
Self {
writer_guid: rmw_request_id.writer_guid,
sequence_number: rmw_request_id.sequence_number,
}
}
pub(crate) fn zero_initialized_rmw() -> rmw_request_id_t {
rmw_request_id_t {
writer_guid: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
sequence_number: 0,
}
}
}
impl rmw_service_info_t {
pub(super) fn rmw_request_id(&self) -> rmw_request_id_t {
rmw_request_id_t {
writer_guid: self.request_id.writer_guid,
sequence_number: self.request_id.sequence_number,
}
}
}