nros_diagnostic_msgs/msg/
diagnostic_status.rs1use nros_core::{Deserialize, RosMessage, Serialize};
6use nros_serdes::{CdrReader, CdrWriter, DeserError, SerError};
7pub const OK: u8 = 0;
8pub const WARN: u8 = 1;
9pub const ERROR: u8 = 2;
10pub const STALE: u8 = 3;
11
12#[derive(Debug, Clone, Default, PartialEq)]
14pub struct DiagnosticStatus {
15 pub level: u8,
16 pub name: heapless::String<64>,
17 pub message: heapless::String<128>,
18 pub hardware_id: heapless::String<96>,
19 pub values: heapless::Vec<crate::msg::KeyValue, 8>,
20}
21
22impl Serialize for DiagnosticStatus {
23 fn serialize(&self, writer: &mut CdrWriter) -> Result<(), SerError> {
24 let __dh = writer.begin_dheader()?;
27 writer.write_u8(self.level)?;
28 writer.write_string(self.name.as_str())?;
29 writer.write_string(self.message.as_str())?;
30 writer.write_string(self.hardware_id.as_str())?;
31 writer.write_u32(self.values.len() as u32)?;
32 for item in &self.values {
33 item.serialize(writer)?;
34 }
35 writer.end_dheader(__dh)?;
36 Ok(())
37 }
38}
39
40impl Deserialize for DiagnosticStatus {
41 fn deserialize(reader: &mut CdrReader) -> Result<Self, DeserError> {
42 let __dh = reader.begin_dheader()?;
45 let __value = Self {
46 level: reader.read_u8()?,
47 name: {
48 let s = reader.read_string()?;
49 heapless::String::try_from(s).map_err(|_| DeserError::CapacityExceeded)?
50 },
51 message: {
52 let s = reader.read_string()?;
53 heapless::String::try_from(s).map_err(|_| DeserError::CapacityExceeded)?
54 },
55 hardware_id: {
56 let s = reader.read_string()?;
57 heapless::String::try_from(s).map_err(|_| DeserError::CapacityExceeded)?
58 },
59 values: {
60 let len = reader.read_u32()? as usize;
61 let mut vec = heapless::Vec::new();
62 for _ in 0..len {
63 vec.push(Deserialize::deserialize(reader)?)
64 .map_err(|_| DeserError::CapacityExceeded)?;
65 }
66 vec
67 },
68 };
69 reader.end_dheader(__dh)?;
70 Ok(__value)
71 }
72}
73
74impl RosMessage for DiagnosticStatus {
75 const TYPE_NAME: &'static str = "diagnostic_msgs::msg::dds_::DiagnosticStatus_";
76 const TYPE_HASH: &'static str = "TypeHashNotSupported";
77 const MAX_SERIALIZED_BOUND: Option<usize> = ::nros_serdes::size::max_serialized_bound::<Self>();
81}
82
83#[allow(non_upper_case_globals)]
88pub const NESTED_VALUES: ::nros_serdes::NestedType = ::nros_serdes::NestedType {
89 type_name: <crate::msg::KeyValue as ::nros_serdes::Message>::TYPE_NAME,
90 fields: <crate::msg::KeyValue as ::nros_serdes::Message>::FIELDS,
91};
92#[allow(non_upper_case_globals)]
93pub const FT_VALUES_ELEM: ::nros_serdes::FieldType =
94 ::nros_serdes::FieldType::Nested(&NESTED_VALUES);
95impl ::nros_serdes::Message for DiagnosticStatus {
96 const TYPE_NAME: &'static str = "diagnostic_msgs/msg/DiagnosticStatus";
97 const FIELDS: &'static [::nros_serdes::Field] = &[
98 ::nros_serdes::Field {
99 name: "level",
100 ty: ::nros_serdes::FieldType::Uint8,
101 offset: ::core::mem::offset_of!(DiagnosticStatus, level),
102 },
103 ::nros_serdes::Field {
104 name: "name",
105 ty: ::nros_serdes::FieldType::BoundedString(64),
106 offset: ::core::mem::offset_of!(DiagnosticStatus, name),
107 },
108 ::nros_serdes::Field {
109 name: "message",
110 ty: ::nros_serdes::FieldType::BoundedString(128),
111 offset: ::core::mem::offset_of!(DiagnosticStatus, message),
112 },
113 ::nros_serdes::Field {
114 name: "hardware_id",
115 ty: ::nros_serdes::FieldType::BoundedString(96),
116 offset: ::core::mem::offset_of!(DiagnosticStatus, hardware_id),
117 },
118 ::nros_serdes::Field {
119 name: "values",
120 ty: ::nros_serdes::FieldType::BoundedSequence(8, &FT_VALUES_ELEM),
121 offset: ::core::mem::offset_of!(DiagnosticStatus, values),
122 },
123 ];
124}