Skip to main content

nros_std_msgs/msg/
multi_array_dimension.rs

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