Skip to main content

MessageInfo

Struct MessageInfo 

Source
pub struct MessageInfo { /* private fields */ }
Expand description

Metadata about a received message

Contains information about the source and timing of a message.

ADOPT-BOUNDED against rclrs’s MessageInfo, which exposes the whole rmw_message_info_t. This is a flat struct of what an embedded backend can fill: both timestamps, both sequence numbers and a 24-byte publisher gid. Whether a message carries it at all is a BACKEND property — zenoh fills it from the attachment, Cyclone from take_with_info, and a backend that reports no metadata hands the callback None rather than a zeroed value. How many gid bytes mean anything is backend-specific too: see publisher_gid.

Implementations§

Source§

impl MessageInfo

Source

pub const fn new() -> MessageInfo

Create a new MessageInfo with all fields set to defaults

Source

pub const fn with_timestamps(source: Time, received: Time) -> MessageInfo

Create a MessageInfo with the given timestamps

Source

pub const fn source_timestamp(&self) -> Time

Get the timestamp when the message was published

Source

pub const fn received_timestamp(&self) -> Time

Get the timestamp when the message was received

Source

pub const fn publication_sequence_number(&self) -> i64

Get the publication sequence number

Source

pub const fn reception_sequence_number(&self) -> i64

Get the reception sequence number

Source

pub const fn publisher_gid(&self) -> &[u8; 24]

Get the publisher’s Global Identifier (GID).

The array is 24 bytes. How many of them MEAN anything is a backend property.

The width is upstream’s (PUBLISHER_GID_SIZE), so this value and the rmw_gid_t the get_gid_for_publisher vtable slot fills are one type — and, since issue 1495, one VALUE on the backends that produce either:

  • zenoh fills 16 and zero-pads 8. The 16 are XXH3-128 of the sending entity’s liveliness keyexpr — rmw_zenoh_cpp’s own derivation, so it is the gid the sender’s get_gid reports and the gid ros2 topic info --verbose prints for it, ours or a stock peer’s. RMW_ATTACHMENT_SIZE carries 16 because that is rmw_zenoh_cpp’s wire layout (its reader REJECTS any other length); the padding is written by pad_publisher_gid. Compare whole arrays anyway.
  • Cyclone fills 16 and zero-pads 8: the sending WRITER’s GUID, which is what its get_gid reports and a DDS graph prints. A stock Humble rmw_cyclonedds_cpp subscriber reports something else here (the 8-byte publication handle), so do not compare this field against one read from such a peer.
  • XRCE and uORB never fill it. A backend that reports no metadata leaves the message_info() callback a None, not a zeroed gid.

An all-zero gid therefore means “this backend did not say” (or, on Cyclone, that the writer unmatched before the take), never “the publisher’s id is zero”.

Source

pub fn set_source_timestamp(&mut self, ts: Time)

Set the source timestamp

Source

pub fn set_received_timestamp(&mut self, ts: Time)

Set the received timestamp

Source

pub fn set_publication_sequence_number(&mut self, seq: i64)

Set the publication sequence number

Source

pub fn set_reception_sequence_number(&mut self, seq: i64)

Set the reception sequence number

Source

pub fn set_publisher_gid(&mut self, gid: [u8; 24])

Set the publisher GID.

Takes the full PUBLISHER_GID_SIZE width. A backend whose identity is narrower zero-extends it through pad_publisher_gid rather than building the array itself — see publisher_gid for what a reader may and may not conclude from the result.

Trait Implementations§

Source§

impl Clone for MessageInfo

Source§

fn clone(&self) -> MessageInfo

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for MessageInfo

Source§

impl Debug for MessageInfo

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for MessageInfo

Source§

fn default() -> MessageInfo

Returns the “default value” for a type. Read more
Source§

impl Eq for MessageInfo

Source§

impl PartialEq for MessageInfo

Source§

fn eq(&self, other: &MessageInfo) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for MessageInfo

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.