Skip to main content

nros_std_msgs/msg/
string.rs

1// nros message type - pure Rust, no_std compatible
2// Package: std_msgs
3// Message: String
4
5use nros_core::{Deserialize, RosMessage, Serialize};
6use nros_serdes::{CdrReader, CdrWriter, DeserError, SerError};
7
8/// String message type
9#[derive(Debug, Clone, Default, PartialEq)]
10pub struct String {
11    pub data: heapless::String<256>,
12}
13
14impl Serialize for String {
15    fn serialize(&self, writer: &mut CdrWriter) -> Result<(), SerError> {
16        // phase-303 W4 (#0267) — DHEADER wrap for XCDR2 appendable structs.
17        // No-op under XCDR1 (byte-identical); under XCDR2 delimits this struct.
18        let __dh = writer.begin_dheader()?;
19        writer.write_string(self.data.as_str())?;
20        writer.end_dheader(__dh)?;
21        Ok(())
22    }
23}
24
25impl Deserialize for String {
26    fn deserialize(reader: &mut CdrReader) -> Result<Self, DeserError> {
27        // phase-303 W4 (#0267) — read the XCDR2 DHEADER (no-op under XCDR1);
28        // end_dheader skips any unknown trailing members (forward compat).
29        let __dh = reader.begin_dheader()?;
30        let __value = Self {
31            data: {
32                let s = reader.read_string()?;
33                heapless::String::try_from(s).map_err(|_| DeserError::CapacityExceeded)?
34            },
35        };
36        reader.end_dheader(__dh)?;
37        Ok(__value)
38    }
39}
40
41impl RosMessage for String {
42    const TYPE_NAME: &'static str = "std_msgs::msg::dds_::String_";
43    const TYPE_HASH: &'static str = "TypeHashNotSupported";
44    // Issue 1179 -- the type's bound on `RosMessage`, the one trait every
45    // backend's registration can read. Computed from the schema below, not
46    // copied, so it cannot drift from it.
47    const MAX_SERIALIZED_BOUND: Option<usize> = ::nros_serdes::size::max_serialized_bound::<Self>();
48}
49
50// ── nros_serdes::Message — runtime field schema ─────────────────────────────
51// Consumed by RMW backends that build wire-type descriptors at runtime
52// (Cyclone DDS dynamic types, …) without per-RMW codegen at compile time.
53
54impl ::nros_serdes::Message for String {
55    const TYPE_NAME: &'static str = "std_msgs/msg/String";
56    const FIELDS: &'static [::nros_serdes::Field] = &[::nros_serdes::Field {
57        name: "data",
58        ty: ::nros_serdes::FieldType::String,
59        offset: ::core::mem::offset_of!(String, data),
60    }];
61}