sbp/messages/
mod.rs

1// Copyright (C) 2015-2021 Swift Navigation Inc.
2// Contact: https://support.swiftnav.com
3//
4// This source is subject to the license found in the file 'LICENSE' which must
5// be distributed together with this source. All other rights reserved.
6//
7// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
8// EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
9// WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
10//! SBP message definitions.
11
12//****************************************************************************
13// Automatically generated from
14// 'generator/sbpg/targets/resources/rust/sbp_messages_mod.rs'
15//
16// Please do not hand edit!
17//****************************************************************************/
18pub mod acquisition;
19pub mod bootload;
20pub mod ext_events;
21pub mod file_io;
22pub mod flash;
23pub mod gnss;
24pub mod imu;
25pub mod integrity;
26pub mod invalid;
27pub mod linux;
28pub mod logging;
29pub mod mag;
30pub mod navigation;
31pub mod ndb;
32pub mod observation;
33pub mod orientation;
34pub mod piksi;
35pub mod profiling;
36pub mod sbas;
37pub mod settings;
38pub mod signing;
39pub mod solution_meta;
40pub mod ssr;
41pub mod system;
42pub mod telemetry;
43pub mod tracking;
44pub mod unknown;
45pub mod user;
46pub mod vehicle;
47use self::acquisition::msg_acq_result::MsgAcqResult;
48use self::acquisition::msg_acq_result_dep_a::MsgAcqResultDepA;
49use self::acquisition::msg_acq_result_dep_b::MsgAcqResultDepB;
50use self::acquisition::msg_acq_result_dep_c::MsgAcqResultDepC;
51use self::acquisition::msg_acq_sv_profile::MsgAcqSvProfile;
52use self::acquisition::msg_acq_sv_profile_dep::MsgAcqSvProfileDep;
53use self::bootload::msg_bootloader_handshake_dep_a::MsgBootloaderHandshakeDepA;
54use self::bootload::msg_bootloader_handshake_req::MsgBootloaderHandshakeReq;
55use self::bootload::msg_bootloader_handshake_resp::MsgBootloaderHandshakeResp;
56use self::bootload::msg_bootloader_jump_to_app::MsgBootloaderJumpToApp;
57use self::bootload::msg_nap_device_dna_req::MsgNapDeviceDnaReq;
58use self::bootload::msg_nap_device_dna_resp::MsgNapDeviceDnaResp;
59use self::ext_events::msg_ext_event::MsgExtEvent;
60use self::file_io::msg_fileio_config_req::MsgFileioConfigReq;
61use self::file_io::msg_fileio_config_resp::MsgFileioConfigResp;
62use self::file_io::msg_fileio_read_dir_req::MsgFileioReadDirReq;
63use self::file_io::msg_fileio_read_dir_resp::MsgFileioReadDirResp;
64use self::file_io::msg_fileio_read_req::MsgFileioReadReq;
65use self::file_io::msg_fileio_read_resp::MsgFileioReadResp;
66use self::file_io::msg_fileio_remove::MsgFileioRemove;
67use self::file_io::msg_fileio_write_req::MsgFileioWriteReq;
68use self::file_io::msg_fileio_write_resp::MsgFileioWriteResp;
69use self::flash::msg_flash_done::MsgFlashDone;
70use self::flash::msg_flash_erase::MsgFlashErase;
71use self::flash::msg_flash_program::MsgFlashProgram;
72use self::flash::msg_flash_read_req::MsgFlashReadReq;
73use self::flash::msg_flash_read_resp::MsgFlashReadResp;
74use self::flash::msg_m25_flash_write_status::MsgM25FlashWriteStatus;
75use self::flash::msg_stm_flash_lock_sector::MsgStmFlashLockSector;
76use self::flash::msg_stm_flash_unlock_sector::MsgStmFlashUnlockSector;
77use self::flash::msg_stm_unique_id_req::MsgStmUniqueIdReq;
78use self::flash::msg_stm_unique_id_resp::MsgStmUniqueIdResp;
79use self::imu::msg_imu_aux::MsgImuAux;
80use self::imu::msg_imu_comp::MsgImuComp;
81use self::imu::msg_imu_raw::MsgImuRaw;
82use self::integrity::msg_acknowledge::MsgAcknowledge;
83use self::integrity::msg_ssr_flag_high_level::MsgSsrFlagHighLevel;
84use self::integrity::msg_ssr_flag_high_level_dep_a::MsgSsrFlagHighLevelDepA;
85use self::integrity::msg_ssr_flag_iono_grid_point_sat_los::MsgSsrFlagIonoGridPointSatLos;
86use self::integrity::msg_ssr_flag_iono_grid_points::MsgSsrFlagIonoGridPoints;
87use self::integrity::msg_ssr_flag_iono_tile_sat_los::MsgSsrFlagIonoTileSatLos;
88use self::integrity::msg_ssr_flag_satellites::MsgSsrFlagSatellites;
89use self::integrity::msg_ssr_flag_tropo_grid_points::MsgSsrFlagTropoGridPoints;
90use self::invalid::Invalid;
91use self::linux::msg_linux_cpu_state::MsgLinuxCpuState;
92use self::linux::msg_linux_cpu_state_dep_a::MsgLinuxCpuStateDepA;
93use self::linux::msg_linux_mem_state::MsgLinuxMemState;
94use self::linux::msg_linux_mem_state_dep_a::MsgLinuxMemStateDepA;
95use self::linux::msg_linux_process_fd_count::MsgLinuxProcessFdCount;
96use self::linux::msg_linux_process_fd_summary::MsgLinuxProcessFdSummary;
97use self::linux::msg_linux_process_socket_counts::MsgLinuxProcessSocketCounts;
98use self::linux::msg_linux_process_socket_queues::MsgLinuxProcessSocketQueues;
99use self::linux::msg_linux_socket_usage::MsgLinuxSocketUsage;
100use self::linux::msg_linux_sys_state::MsgLinuxSysState;
101use self::linux::msg_linux_sys_state_dep_a::MsgLinuxSysStateDepA;
102use self::logging::msg_fwd::MsgFwd;
103use self::logging::msg_log::MsgLog;
104use self::logging::msg_print_dep::MsgPrintDep;
105use self::mag::msg_mag_raw::MsgMagRaw;
106use self::navigation::msg_age_corrections::MsgAgeCorrections;
107use self::navigation::msg_baseline_ecef::MsgBaselineEcef;
108use self::navigation::msg_baseline_ecef_dep_a::MsgBaselineEcefDepA;
109use self::navigation::msg_baseline_heading_dep_a::MsgBaselineHeadingDepA;
110use self::navigation::msg_baseline_ned::MsgBaselineNed;
111use self::navigation::msg_baseline_ned_dep_a::MsgBaselineNedDepA;
112use self::navigation::msg_dops::MsgDops;
113use self::navigation::msg_dops_dep_a::MsgDopsDepA;
114use self::navigation::msg_gps_time::MsgGpsTime;
115use self::navigation::msg_gps_time_dep_a::MsgGpsTimeDepA;
116use self::navigation::msg_gps_time_gnss::MsgGpsTimeGnss;
117use self::navigation::msg_pos_ecef::MsgPosEcef;
118use self::navigation::msg_pos_ecef_cov::MsgPosEcefCov;
119use self::navigation::msg_pos_ecef_cov_gnss::MsgPosEcefCovGnss;
120use self::navigation::msg_pos_ecef_dep_a::MsgPosEcefDepA;
121use self::navigation::msg_pos_ecef_gnss::MsgPosEcefGnss;
122use self::navigation::msg_pos_llh::MsgPosLlh;
123use self::navigation::msg_pos_llh_acc::MsgPosLlhAcc;
124use self::navigation::msg_pos_llh_cov::MsgPosLlhCov;
125use self::navigation::msg_pos_llh_cov_gnss::MsgPosLlhCovGnss;
126use self::navigation::msg_pos_llh_dep_a::MsgPosLlhDepA;
127use self::navigation::msg_pos_llh_gnss::MsgPosLlhGnss;
128use self::navigation::msg_pose_relative::MsgPoseRelative;
129use self::navigation::msg_protection_level::MsgProtectionLevel;
130use self::navigation::msg_protection_level_dep_a::MsgProtectionLevelDepA;
131use self::navigation::msg_reference_frame_param::MsgReferenceFrameParam;
132use self::navigation::msg_utc_leap_second::MsgUtcLeapSecond;
133use self::navigation::msg_utc_time::MsgUtcTime;
134use self::navigation::msg_utc_time_gnss::MsgUtcTimeGnss;
135use self::navigation::msg_vel_body::MsgVelBody;
136use self::navigation::msg_vel_cog::MsgVelCog;
137use self::navigation::msg_vel_ecef::MsgVelEcef;
138use self::navigation::msg_vel_ecef_cov::MsgVelEcefCov;
139use self::navigation::msg_vel_ecef_cov_gnss::MsgVelEcefCovGnss;
140use self::navigation::msg_vel_ecef_dep_a::MsgVelEcefDepA;
141use self::navigation::msg_vel_ecef_gnss::MsgVelEcefGnss;
142use self::navigation::msg_vel_ned::MsgVelNed;
143use self::navigation::msg_vel_ned_cov::MsgVelNedCov;
144use self::navigation::msg_vel_ned_cov_gnss::MsgVelNedCovGnss;
145use self::navigation::msg_vel_ned_dep_a::MsgVelNedDepA;
146use self::navigation::msg_vel_ned_gnss::MsgVelNedGnss;
147use self::ndb::msg_ndb_event::MsgNdbEvent;
148use self::observation::msg_almanac_glo::MsgAlmanacGlo;
149use self::observation::msg_almanac_glo_dep::MsgAlmanacGloDep;
150use self::observation::msg_almanac_gps::MsgAlmanacGps;
151use self::observation::msg_almanac_gps_dep::MsgAlmanacGpsDep;
152use self::observation::msg_base_pos_ecef::MsgBasePosEcef;
153use self::observation::msg_base_pos_llh::MsgBasePosLlh;
154use self::observation::msg_ephemeris_bds::MsgEphemerisBds;
155use self::observation::msg_ephemeris_dep_a::MsgEphemerisDepA;
156use self::observation::msg_ephemeris_dep_b::MsgEphemerisDepB;
157use self::observation::msg_ephemeris_dep_c::MsgEphemerisDepC;
158use self::observation::msg_ephemeris_dep_d::MsgEphemerisDepD;
159use self::observation::msg_ephemeris_gal::MsgEphemerisGal;
160use self::observation::msg_ephemeris_gal_dep_a::MsgEphemerisGalDepA;
161use self::observation::msg_ephemeris_glo::MsgEphemerisGlo;
162use self::observation::msg_ephemeris_glo_dep_a::MsgEphemerisGloDepA;
163use self::observation::msg_ephemeris_glo_dep_b::MsgEphemerisGloDepB;
164use self::observation::msg_ephemeris_glo_dep_c::MsgEphemerisGloDepC;
165use self::observation::msg_ephemeris_glo_dep_d::MsgEphemerisGloDepD;
166use self::observation::msg_ephemeris_gps::MsgEphemerisGps;
167use self::observation::msg_ephemeris_gps_dep_e::MsgEphemerisGpsDepE;
168use self::observation::msg_ephemeris_gps_dep_f::MsgEphemerisGpsDepF;
169use self::observation::msg_ephemeris_qzss::MsgEphemerisQzss;
170use self::observation::msg_ephemeris_sbas::MsgEphemerisSbas;
171use self::observation::msg_ephemeris_sbas_dep_a::MsgEphemerisSbasDepA;
172use self::observation::msg_ephemeris_sbas_dep_b::MsgEphemerisSbasDepB;
173use self::observation::msg_glo_biases::MsgGloBiases;
174use self::observation::msg_gnss_capb::MsgGnssCapb;
175use self::observation::msg_group_delay::MsgGroupDelay;
176use self::observation::msg_group_delay_dep_a::MsgGroupDelayDepA;
177use self::observation::msg_group_delay_dep_b::MsgGroupDelayDepB;
178use self::observation::msg_iono::MsgIono;
179use self::observation::msg_obs::MsgObs;
180use self::observation::msg_obs_dep_a::MsgObsDepA;
181use self::observation::msg_obs_dep_b::MsgObsDepB;
182use self::observation::msg_obs_dep_c::MsgObsDepC;
183use self::observation::msg_osr::MsgOsr;
184use self::observation::msg_sv_az_el::MsgSvAzEl;
185use self::observation::msg_sv_configuration_gps_dep::MsgSvConfigurationGpsDep;
186use self::orientation::msg_angular_rate::MsgAngularRate;
187use self::orientation::msg_baseline_heading::MsgBaselineHeading;
188use self::orientation::msg_orient_euler::MsgOrientEuler;
189use self::orientation::msg_orient_quat::MsgOrientQuat;
190use self::piksi::msg_almanac::MsgAlmanac;
191use self::piksi::msg_cell_modem_status::MsgCellModemStatus;
192use self::piksi::msg_command_output::MsgCommandOutput;
193use self::piksi::msg_command_req::MsgCommandReq;
194use self::piksi::msg_command_resp::MsgCommandResp;
195use self::piksi::msg_cw_results::MsgCwResults;
196use self::piksi::msg_cw_start::MsgCwStart;
197use self::piksi::msg_device_monitor::MsgDeviceMonitor;
198use self::piksi::msg_front_end_gain::MsgFrontEndGain;
199use self::piksi::msg_iar_state::MsgIarState;
200use self::piksi::msg_init_base_dep::MsgInitBaseDep;
201use self::piksi::msg_mask_satellite::MsgMaskSatellite;
202use self::piksi::msg_mask_satellite_dep::MsgMaskSatelliteDep;
203use self::piksi::msg_network_bandwidth_usage::MsgNetworkBandwidthUsage;
204use self::piksi::msg_network_state_req::MsgNetworkStateReq;
205use self::piksi::msg_network_state_resp::MsgNetworkStateResp;
206use self::piksi::msg_reset::MsgReset;
207use self::piksi::msg_reset_dep::MsgResetDep;
208use self::piksi::msg_reset_filters::MsgResetFilters;
209use self::piksi::msg_set_time::MsgSetTime;
210use self::piksi::msg_specan::MsgSpecan;
211use self::piksi::msg_specan_dep::MsgSpecanDep;
212use self::piksi::msg_thread_state::MsgThreadState;
213use self::piksi::msg_uart_state::MsgUartState;
214use self::piksi::msg_uart_state_depa::MsgUartStateDepa;
215use self::profiling::msg_measurement_point::MsgMeasurementPoint;
216use self::profiling::msg_profiling_resource_counter::MsgProfilingResourceCounter;
217use self::profiling::msg_profiling_system_info::MsgProfilingSystemInfo;
218use self::profiling::msg_profiling_thread_info::MsgProfilingThreadInfo;
219use self::sbas::msg_sbas_raw::MsgSbasRaw;
220use self::settings::msg_settings_read_by_index_done::MsgSettingsReadByIndexDone;
221use self::settings::msg_settings_read_by_index_req::MsgSettingsReadByIndexReq;
222use self::settings::msg_settings_read_by_index_resp::MsgSettingsReadByIndexResp;
223use self::settings::msg_settings_read_req::MsgSettingsReadReq;
224use self::settings::msg_settings_read_resp::MsgSettingsReadResp;
225use self::settings::msg_settings_register::MsgSettingsRegister;
226use self::settings::msg_settings_register_resp::MsgSettingsRegisterResp;
227use self::settings::msg_settings_save::MsgSettingsSave;
228use self::settings::msg_settings_write::MsgSettingsWrite;
229use self::settings::msg_settings_write_resp::MsgSettingsWriteResp;
230use self::signing::msg_aes_cmac_signature::MsgAesCmacSignature;
231use self::signing::msg_certificate_chain::MsgCertificateChain;
232use self::signing::msg_certificate_chain_dep::MsgCertificateChainDep;
233use self::signing::msg_ecdsa_certificate::MsgEcdsaCertificate;
234use self::signing::msg_ecdsa_signature::MsgEcdsaSignature;
235use self::signing::msg_ecdsa_signature_dep_a::MsgEcdsaSignatureDepA;
236use self::signing::msg_ecdsa_signature_dep_b::MsgEcdsaSignatureDepB;
237use self::signing::msg_ed25519_certificate_dep::MsgEd25519CertificateDep;
238use self::signing::msg_ed25519_signature_dep_a::MsgEd25519SignatureDepA;
239use self::signing::msg_ed25519_signature_dep_b::MsgEd25519SignatureDepB;
240use self::solution_meta::msg_soln_meta::MsgSolnMeta;
241use self::solution_meta::msg_soln_meta_dep_a::MsgSolnMetaDepA;
242use self::ssr::msg_ssr_code_biases::MsgSsrCodeBiases;
243use self::ssr::msg_ssr_code_phase_biases_bounds::MsgSsrCodePhaseBiasesBounds;
244use self::ssr::msg_ssr_grid_definition_dep_a::MsgSsrGridDefinitionDepA;
245use self::ssr::msg_ssr_gridded_correction::MsgSsrGriddedCorrection;
246use self::ssr::msg_ssr_gridded_correction_bounds::MsgSsrGriddedCorrectionBounds;
247use self::ssr::msg_ssr_gridded_correction_dep_a::MsgSsrGriddedCorrectionDepA;
248use self::ssr::msg_ssr_gridded_correction_no_std_dep_a::MsgSsrGriddedCorrectionNoStdDepA;
249use self::ssr::msg_ssr_orbit_clock::MsgSsrOrbitClock;
250use self::ssr::msg_ssr_orbit_clock_bounds::MsgSsrOrbitClockBounds;
251use self::ssr::msg_ssr_orbit_clock_bounds_degradation::MsgSsrOrbitClockBoundsDegradation;
252use self::ssr::msg_ssr_orbit_clock_dep_a::MsgSsrOrbitClockDepA;
253use self::ssr::msg_ssr_phase_biases::MsgSsrPhaseBiases;
254use self::ssr::msg_ssr_satellite_apc::MsgSsrSatelliteApc;
255use self::ssr::msg_ssr_satellite_apc_dep::MsgSsrSatelliteApcDep;
256use self::ssr::msg_ssr_stec_correction::MsgSsrStecCorrection;
257use self::ssr::msg_ssr_stec_correction_dep::MsgSsrStecCorrectionDep;
258use self::ssr::msg_ssr_stec_correction_dep_a::MsgSsrStecCorrectionDepA;
259use self::ssr::msg_ssr_tile_definition::MsgSsrTileDefinition;
260use self::ssr::msg_ssr_tile_definition_dep_a::MsgSsrTileDefinitionDepA;
261use self::ssr::msg_ssr_tile_definition_dep_b::MsgSsrTileDefinitionDepB;
262use self::system::msg_csac_telemetry::MsgCsacTelemetry;
263use self::system::msg_csac_telemetry_labels::MsgCsacTelemetryLabels;
264use self::system::msg_dgnss_status::MsgDgnssStatus;
265use self::system::msg_gnss_time_offset::MsgGnssTimeOffset;
266use self::system::msg_group_meta::MsgGroupMeta;
267use self::system::msg_heartbeat::MsgHeartbeat;
268use self::system::msg_ins_status::MsgInsStatus;
269use self::system::msg_ins_updates::MsgInsUpdates;
270use self::system::msg_pps_time::MsgPpsTime;
271use self::system::msg_sensor_aid_event::MsgSensorAidEvent;
272use self::system::msg_startup::MsgStartup;
273use self::system::msg_status_journal::MsgStatusJournal;
274use self::system::msg_status_report::MsgStatusReport;
275use self::telemetry::msg_tel_sv::MsgTelSv;
276use self::tracking::msg_measurement_state::MsgMeasurementState;
277use self::tracking::msg_tracking_iq::MsgTrackingIq;
278use self::tracking::msg_tracking_iq_dep_a::MsgTrackingIqDepA;
279use self::tracking::msg_tracking_iq_dep_b::MsgTrackingIqDepB;
280use self::tracking::msg_tracking_state::MsgTrackingState;
281use self::tracking::msg_tracking_state_dep_a::MsgTrackingStateDepA;
282use self::tracking::msg_tracking_state_dep_b::MsgTrackingStateDepB;
283use self::tracking::msg_tracking_state_detailed_dep::MsgTrackingStateDetailedDep;
284use self::tracking::msg_tracking_state_detailed_dep_a::MsgTrackingStateDetailedDepA;
285use self::unknown::Unknown;
286use self::user::msg_user_data::MsgUserData;
287use self::vehicle::msg_odometry::MsgOdometry;
288use self::vehicle::msg_wheeltick::MsgWheeltick;
289
290mod lib {
291    //! Common imports so we can just `use super::lib::*` in all the message files
292
293    pub use std::convert::{TryFrom, TryInto};
294
295    pub use crate::sbp_string::{
296        DoubleNullTerminated, Multipart, NullTerminated, SbpString, Unterminated,
297    };
298    #[cfg(feature = "swiftnav")]
299    pub use crate::time;
300    pub use crate::wire_format::{PayloadParseError, WireFormat};
301
302    pub use super::{ConcreteMessage, FriendlyName, Sbp, SbpMessage, TryFromSbpError};
303
304    pub use bytes::{Buf, BufMut};
305
306    #[cfg(feature = "serde")]
307    pub use serde_big_array::BigArray;
308
309    macro_rules! get_bit_range {
310        ($bitrange:expr, $source_ty:ty, $target_ty:ty, $msb:expr, $lsb:expr) => {{
311            let source_bit_len = std::mem::size_of::<$source_ty>() * 8;
312            let target_bit_len = std::mem::size_of::<$target_ty>() * 8;
313            let result = (($bitrange << (source_bit_len - $msb - 1))
314                >> (source_bit_len - $msb - 1 + $lsb)) as $target_ty;
315            result << (target_bit_len - ($msb - $lsb + 1)) >> (target_bit_len - ($msb - $lsb + 1))
316        }};
317    }
318
319    macro_rules! set_bit_range {
320        ($bitrange:expr, $value: expr, $source_ty:ty, $target_ty:ty, $msb:expr, $lsb:expr) => {
321            let source_bit_len = std::mem::size_of::<$source_ty>() * 8;
322            let mask: $source_ty = !(0 as $source_ty)
323                << (source_bit_len - $msb - 1)
324                >> (source_bit_len - $msb - 1 + $lsb)
325                << ($lsb);
326            *$bitrange &= !mask;
327            *$bitrange |= ($value as $source_ty << $lsb) & mask;
328        };
329    }
330
331    pub(crate) use get_bit_range;
332    pub(crate) use set_bit_range;
333}
334
335use lib::*;
336
337/// Common functionality available to all SBP messages.
338pub trait SbpMessage: WireFormat + Clone {
339    /// Get the message name.
340    fn message_name(&self) -> &'static str;
341    /// Get the message type.
342    fn message_type(&self) -> Option<u16>;
343    /// Get the sender_id if it is set.
344    fn sender_id(&self) -> Option<u16>;
345    /// Set the sender id.
346    fn set_sender_id(&mut self, new_id: u16);
347    /// Number of bytes this message will take on the wire.
348    fn encoded_len(&self) -> usize;
349    /// Get the GPS time associated with the message.
350    #[cfg(feature = "swiftnav")]
351    fn gps_time(&self) -> Option<Result<crate::time::MessageTime, crate::time::GpsTimeError>> {
352        None
353    }
354    /// Get friendly name associated with the message.
355    fn friendly_name(&self) -> &'static str {
356        ""
357    }
358    /// Tells you if the message is valid or if it is not a valid message and may need to be
359    /// special cased at certain points.
360    fn is_valid(&self) -> bool;
361    fn into_valid_msg(self) -> Result<Self, crate::messages::invalid::Invalid>;
362}
363
364/// Implemented by messages who's message name and type are known at compile time.
365/// This is everything that implements [SbpMessage] except for [Sbp].
366pub trait ConcreteMessage: SbpMessage + TryFrom<Sbp, Error = TryFromSbpError> {
367    /// The message type.
368    const MESSAGE_TYPE: u16;
369    /// The message name.
370    const MESSAGE_NAME: &'static str;
371}
372
373/// Friendly name representation of Sbp message
374pub trait FriendlyName {
375    fn friendly_name() -> &'static str;
376}
377
378/// The error returned when using [TryFrom] to convert [Sbp] to the wrong message type.
379#[derive(Debug, Clone)]
380pub struct TryFromSbpError(pub Sbp);
381
382impl std::fmt::Display for TryFromSbpError {
383    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
384        write!(f, "invalid message type for conversion")
385    }
386}
387
388impl std::error::Error for TryFromSbpError {}
389
390/// Represents any SBP message.
391#[cfg_attr(feature = "serde", derive(serde::Serialize), serde(untagged))]
392#[derive(Debug, PartialEq, Clone)]
393#[non_exhaustive]
394pub enum Sbp {
395    /// Deprecated
396    MsgPrintDep(MsgPrintDep),
397    /// Deprecated
398    MsgTrackingStateDetailedDep(MsgTrackingStateDetailedDep),
399    /// Deprecated
400    MsgTrackingStateDepB(MsgTrackingStateDepB),
401    /// Deprecated
402    MsgAcqResultDepB(MsgAcqResultDepB),
403    /// Deprecated
404    MsgAcqResultDepA(MsgAcqResultDepA),
405    /// Deprecated
406    MsgTrackingStateDepA(MsgTrackingStateDepA),
407    /// State of an RTOS thread
408    MsgThreadState(MsgThreadState),
409    /// Deprecated
410    MsgUartStateDepa(MsgUartStateDepa),
411    /// State of the Integer Ambiguity Resolution (IAR) process
412    MsgIarState(MsgIarState),
413    /// Deprecated
414    MsgEphemerisDepA(MsgEphemerisDepA),
415    /// Deprecated
416    MsgMaskSatelliteDep(MsgMaskSatelliteDep),
417    /// Deprecated
418    MsgTrackingIqDepA(MsgTrackingIqDepA),
419    /// State of the UART channels
420    MsgUartState(MsgUartState),
421    /// Deprecated
422    MsgAcqSvProfileDep(MsgAcqSvProfileDep),
423    /// Deprecated
424    MsgAcqResultDepC(MsgAcqResultDepC),
425    /// Detailed signal tracking channel states. DEPRECATED
426    MsgTrackingStateDetailedDepA(MsgTrackingStateDetailedDepA),
427    /// Reset IAR filters (host => Piksi)
428    MsgResetFilters(MsgResetFilters),
429    /// Deprecated
430    MsgInitBaseDep(MsgInitBaseDep),
431    /// Mask a satellite from use in Piksi subsystems
432    MsgMaskSatellite(MsgMaskSatellite),
433    /// Deprecated
434    MsgTrackingIqDepB(MsgTrackingIqDepB),
435    /// Tracking channel correlations
436    MsgTrackingIq(MsgTrackingIq),
437    /// Acquisition perfomance measurement and debug
438    MsgAcqSvProfile(MsgAcqSvProfile),
439    /// Satellite acquisition result
440    MsgAcqResult(MsgAcqResult),
441    /// Signal tracking channel states
442    MsgTrackingState(MsgTrackingState),
443    /// Deprecated
444    MsgObsDepB(MsgObsDepB),
445    /// Base station position
446    MsgBasePosLlh(MsgBasePosLlh),
447    /// Deprecated
448    MsgObsDepA(MsgObsDepA),
449    /// Deprecated
450    MsgEphemerisDepB(MsgEphemerisDepB),
451    /// Deprecated
452    MsgEphemerisDepC(MsgEphemerisDepC),
453    /// Base station position in ECEF
454    MsgBasePosEcef(MsgBasePosEcef),
455    /// Deprecated
456    MsgObsDepC(MsgObsDepC),
457    /// GPS satellite observations
458    MsgObs(MsgObs),
459    /// Deprecated
460    MsgSpecanDep(MsgSpecanDep),
461    /// Spectrum analyzer
462    MsgSpecan(MsgSpecan),
463    /// Measurement Engine signal tracking channel states
464    MsgMeasurementState(MsgMeasurementState),
465    /// Send GPS time from host (host => Piksi)
466    MsgSetTime(MsgSetTime),
467    /// Legacy message to load satellite almanac (host => Piksi)
468    MsgAlmanac(MsgAlmanac),
469    /// Deprecated
470    MsgAlmanacGpsDep(MsgAlmanacGpsDep),
471    /// Deprecated
472    MsgAlmanacGloDep(MsgAlmanacGloDep),
473    /// Satellite broadcast almanac for GPS
474    MsgAlmanacGps(MsgAlmanacGps),
475    /// Satellite broadcast almanac for GLO
476    MsgAlmanacGlo(MsgAlmanacGlo),
477    /// GLONASS L1/L2 Code-Phase biases
478    MsgGloBiases(MsgGloBiases),
479    /// Deprecated
480    MsgEphemerisDepD(MsgEphemerisDepD),
481    /// Deprecated
482    MsgEphemerisGpsDepE(MsgEphemerisGpsDepE),
483    /// Deprecated
484    MsgEphemerisSbasDepA(MsgEphemerisSbasDepA),
485    /// Deprecated
486    MsgEphemerisGloDepA(MsgEphemerisGloDepA),
487    /// Deprecated
488    MsgEphemerisSbasDepB(MsgEphemerisSbasDepB),
489    /// Deprecated
490    MsgEphemerisGloDepB(MsgEphemerisGloDepB),
491    /// Deprecated
492    MsgEphemerisGpsDepF(MsgEphemerisGpsDepF),
493    /// Deprecated
494    MsgEphemerisGloDepC(MsgEphemerisGloDepC),
495    /// Deprecated
496    MsgEphemerisGloDepD(MsgEphemerisGloDepD),
497    /// Satellite broadcast ephemeris for BDS
498    MsgEphemerisBds(MsgEphemerisBds),
499    /// Satellite broadcast ephemeris for GPS
500    MsgEphemerisGps(MsgEphemerisGps),
501    /// Satellite broadcast ephemeris for GLO
502    MsgEphemerisGlo(MsgEphemerisGlo),
503    /// Satellite broadcast ephemeris for SBAS
504    MsgEphemerisSbas(MsgEphemerisSbas),
505    /// Satellite broadcast ephemeris for Galileo
506    MsgEphemerisGal(MsgEphemerisGal),
507    /// Satellite broadcast ephemeris for QZSS
508    MsgEphemerisQzss(MsgEphemerisQzss),
509    /// Iono corrections
510    MsgIono(MsgIono),
511    /// Deprecated
512    MsgSvConfigurationGpsDep(MsgSvConfigurationGpsDep),
513    /// Deprecated
514    MsgGroupDelayDepA(MsgGroupDelayDepA),
515    /// Deprecated
516    MsgGroupDelayDepB(MsgGroupDelayDepB),
517    /// Group Delay
518    MsgGroupDelay(MsgGroupDelay),
519    /// Deprecated
520    MsgEphemerisGalDepA(MsgEphemerisGalDepA),
521    /// GNSS capabilities masks
522    MsgGnssCapb(MsgGnssCapb),
523    /// Satellite azimuths and elevations
524    MsgSvAzEl(MsgSvAzEl),
525    /// Write device configuration settings (host => device)
526    MsgSettingsWrite(MsgSettingsWrite),
527    /// Save settings to flash (host => device)
528    MsgSettingsSave(MsgSettingsSave),
529    /// Read setting by direct index (host => device)
530    MsgSettingsReadByIndexReq(MsgSettingsReadByIndexReq),
531    /// File read from the file system (host <= device)
532    MsgFileioReadResp(MsgFileioReadResp),
533    /// Read device configuration settings (host => device)
534    MsgSettingsReadReq(MsgSettingsReadReq),
535    /// Read device configuration settings (host <= device)
536    MsgSettingsReadResp(MsgSettingsReadResp),
537    /// Finished reading settings (host <= device)
538    MsgSettingsReadByIndexDone(MsgSettingsReadByIndexDone),
539    /// Read setting by direct index (host <= device)
540    MsgSettingsReadByIndexResp(MsgSettingsReadByIndexResp),
541    /// Read file from the file system (host => device)
542    MsgFileioReadReq(MsgFileioReadReq),
543    /// List files in a directory (host => device)
544    MsgFileioReadDirReq(MsgFileioReadDirReq),
545    /// Files listed in a directory (host <= device)
546    MsgFileioReadDirResp(MsgFileioReadDirResp),
547    /// File written to (host <= device)
548    MsgFileioWriteResp(MsgFileioWriteResp),
549    /// Delete a file from the file system (host => device)
550    MsgFileioRemove(MsgFileioRemove),
551    /// Write to file (host => device)
552    MsgFileioWriteReq(MsgFileioWriteReq),
553    /// Register setting and default value (device => host)
554    MsgSettingsRegister(MsgSettingsRegister),
555    /// Acknowledgement with status of MSG_SETTINGS_WRITE
556    MsgSettingsWriteResp(MsgSettingsWriteResp),
557    /// Deprecated
558    MsgBootloaderHandshakeDepA(MsgBootloaderHandshakeDepA),
559    /// Bootloader jump to application (host => device)
560    MsgBootloaderJumpToApp(MsgBootloaderJumpToApp),
561    /// Deprecated
562    MsgResetDep(MsgResetDep),
563    /// Bootloading handshake request (host => device)
564    MsgBootloaderHandshakeReq(MsgBootloaderHandshakeReq),
565    /// Bootloading handshake response (host <= device)
566    MsgBootloaderHandshakeResp(MsgBootloaderHandshakeResp),
567    /// Device temperature and voltage levels
568    MsgDeviceMonitor(MsgDeviceMonitor),
569    /// Reset the device (host => Piksi)
570    MsgReset(MsgReset),
571    /// Execute a command (host => device)
572    MsgCommandReq(MsgCommandReq),
573    /// Exit code from executed command (device => host)
574    MsgCommandResp(MsgCommandResp),
575    /// Request state of Piksi network interfaces
576    MsgNetworkStateReq(MsgNetworkStateReq),
577    /// State of network interface
578    MsgNetworkStateResp(MsgNetworkStateResp),
579    /// Command output
580    MsgCommandOutput(MsgCommandOutput),
581    /// Bandwidth usage reporting message
582    MsgNetworkBandwidthUsage(MsgNetworkBandwidthUsage),
583    /// Cell modem information update message
584    MsgCellModemStatus(MsgCellModemStatus),
585    /// RF AGC status
586    MsgFrontEndGain(MsgFrontEndGain),
587    /// Legacy message for CW interference channel (Piksi => host)
588    MsgCwResults(MsgCwResults),
589    /// Legacy message for CW interference channel (host => Piksi)
590    MsgCwStart(MsgCwStart),
591    /// Read FPGA device ID over UART response (host <= device)
592    MsgNapDeviceDnaResp(MsgNapDeviceDnaResp),
593    /// Read FPGA device ID over UART request (host => device)
594    MsgNapDeviceDnaReq(MsgNapDeviceDnaReq),
595    /// Flash response message (host <= device)
596    MsgFlashDone(MsgFlashDone),
597    /// Read STM or M25 flash address response (host <= device)
598    MsgFlashReadResp(MsgFlashReadResp),
599    /// Erase sector of device flash memory (host => device)
600    MsgFlashErase(MsgFlashErase),
601    /// Lock sector of STM flash memory (host => device)
602    MsgStmFlashLockSector(MsgStmFlashLockSector),
603    /// Unlock sector of STM flash memory (host => device)
604    MsgStmFlashUnlockSector(MsgStmFlashUnlockSector),
605    /// Read device's hard-coded unique ID response (host <= device)
606    MsgStmUniqueIdResp(MsgStmUniqueIdResp),
607    /// Program flash addresses
608    MsgFlashProgram(MsgFlashProgram),
609    /// Read STM or M25 flash address request (host => device)
610    MsgFlashReadReq(MsgFlashReadReq),
611    /// Read device's hard-coded unique ID request (host => device)
612    MsgStmUniqueIdReq(MsgStmUniqueIdReq),
613    /// Write M25 flash status register (host => device)
614    MsgM25FlashWriteStatus(MsgM25FlashWriteStatus),
615    /// Deprecated
616    MsgGpsTimeDepA(MsgGpsTimeDepA),
617    /// Reports timestamped external pin event
618    MsgExtEvent(MsgExtEvent),
619    /// GPS Time (GNSS + inertial)
620    MsgGpsTime(MsgGpsTime),
621    /// UTC Time
622    MsgUtcTime(MsgUtcTime),
623    /// GNSS-only GPS Time
624    MsgGpsTimeGnss(MsgGpsTimeGnss),
625    /// GNSS-only UTC Time
626    MsgUtcTimeGnss(MsgUtcTimeGnss),
627    /// Per-signal telemetry
628    MsgTelSv(MsgTelSv),
629    /// Register setting and default value (device <= host)
630    MsgSettingsRegisterResp(MsgSettingsRegisterResp),
631    /// Deprecated
632    MsgPosEcefDepA(MsgPosEcefDepA),
633    /// Deprecated
634    MsgPosLlhDepA(MsgPosLlhDepA),
635    /// Deprecated
636    MsgBaselineEcefDepA(MsgBaselineEcefDepA),
637    /// Deprecated
638    MsgBaselineNedDepA(MsgBaselineNedDepA),
639    /// Deprecated
640    MsgVelEcefDepA(MsgVelEcefDepA),
641    /// Deprecated
642    MsgVelNedDepA(MsgVelNedDepA),
643    /// Deprecated
644    MsgDopsDepA(MsgDopsDepA),
645    /// Deprecated
646    MsgBaselineHeadingDepA(MsgBaselineHeadingDepA),
647    /// GNSS-only Dilution of Precision
648    MsgDops(MsgDops),
649    /// Position in ECEF
650    MsgPosEcef(MsgPosEcef),
651    /// Geodetic Position
652    MsgPosLlh(MsgPosLlh),
653    /// GNSS-only Baseline Position in ECEF
654    MsgBaselineEcef(MsgBaselineEcef),
655    /// GNSS-only Baseline in NED
656    MsgBaselineNed(MsgBaselineNed),
657    /// Velocity in ECEF
658    MsgVelEcef(MsgVelEcef),
659    /// Velocity in NED
660    MsgVelNed(MsgVelNed),
661    /// Heading relative to True North
662    MsgBaselineHeading(MsgBaselineHeading),
663    /// Age of corrections
664    MsgAgeCorrections(MsgAgeCorrections),
665    /// Geodetic Position with Covariances
666    MsgPosLlhCov(MsgPosLlhCov),
667    /// Velocity in NED with Covariances
668    MsgVelNedCov(MsgVelNedCov),
669    /// Velocity in User Frame
670    MsgVelBody(MsgVelBody),
671    /// Position in ECEF with Covariances
672    MsgPosEcefCov(MsgPosEcefCov),
673    /// Velocity in ECEF with Covariances
674    MsgVelEcefCov(MsgVelEcefCov),
675    /// Deprecated
676    MsgProtectionLevelDepA(MsgProtectionLevelDepA),
677    /// Computed state and Protection Levels
678    MsgProtectionLevel(MsgProtectionLevel),
679    /// Geodetic Position and Accuracy
680    MsgPosLlhAcc(MsgPosLlhAcc),
681    /// Velocity expressed as course over ground
682    MsgVelCog(MsgVelCog),
683    /// Quaternion 4 component vector
684    MsgOrientQuat(MsgOrientQuat),
685    /// Euler angles
686    MsgOrientEuler(MsgOrientEuler),
687    /// Vehicle Body Frame instantaneous angular rates
688    MsgAngularRate(MsgAngularRate),
689    /// GNSS-only Position in ECEF
690    MsgPosEcefGnss(MsgPosEcefGnss),
691    /// GNSS-only Geodetic Position
692    MsgPosLlhGnss(MsgPosLlhGnss),
693    /// GNSS-only Velocity in ECEF
694    MsgVelEcefGnss(MsgVelEcefGnss),
695    /// GNSS-only Velocity in NED
696    MsgVelNedGnss(MsgVelNedGnss),
697    /// GNSS-only Geodetic Position with Covariances
698    MsgPosLlhCovGnss(MsgPosLlhCovGnss),
699    /// GNSS-only Velocity in NED with Covariances
700    MsgVelNedCovGnss(MsgVelNedCovGnss),
701    /// GNSS-only Position in ECEF with Covariances
702    MsgPosEcefCovGnss(MsgPosEcefCovGnss),
703    /// GNSS-only Velocity in ECEF with Covariances
704    MsgVelEcefCovGnss(MsgVelEcefCovGnss),
705    /// Leap second SBP message.
706    MsgUtcLeapSecond(MsgUtcLeapSecond),
707    /// Reference Frame Transformation Parameters
708    MsgReferenceFrameParam(MsgReferenceFrameParam),
709    /// Relative Pose
710    MsgPoseRelative(MsgPoseRelative),
711    /// Navigation DataBase Event
712    MsgNdbEvent(MsgNdbEvent),
713    /// Plaintext logging messages with levels
714    MsgLog(MsgLog),
715    /// Wrapper for FWD a separate stream of information over SBP
716    MsgFwd(MsgFwd),
717    /// Deprecated
718    MsgSsrOrbitClockDepA(MsgSsrOrbitClockDepA),
719    /// Precise orbit and clock correction
720    MsgSsrOrbitClock(MsgSsrOrbitClock),
721    /// Combined Orbit and Clock Bound
722    MsgSsrOrbitClockBounds(MsgSsrOrbitClockBounds),
723    /// Combined Orbit and Clock Bound Degradation Parameter
724    MsgSsrOrbitClockBoundsDegradation(MsgSsrOrbitClockBoundsDegradation),
725    /// Precise code biases correction
726    MsgSsrCodeBiases(MsgSsrCodeBiases),
727    /// Precise phase biases correction
728    MsgSsrPhaseBiases(MsgSsrPhaseBiases),
729    /// Deprecated
730    MsgSsrStecCorrectionDepA(MsgSsrStecCorrectionDepA),
731    /// Combined Code and Phase Biases Bounds
732    MsgSsrCodePhaseBiasesBounds(MsgSsrCodePhaseBiasesBounds),
733    /// Deprecated
734    MsgSsrGriddedCorrectionNoStdDepA(MsgSsrGriddedCorrectionNoStdDepA),
735    /// Deprecated
736    MsgSsrGridDefinitionDepA(MsgSsrGridDefinitionDepA),
737    /// Deprecated
738    MsgSsrTileDefinitionDepA(MsgSsrTileDefinitionDepA),
739    /// Deprecated
740    MsgSsrTileDefinitionDepB(MsgSsrTileDefinitionDepB),
741    /// Definition of a SSR atmospheric correction tile.
742    MsgSsrTileDefinition(MsgSsrTileDefinition),
743    /// Deprecated
744    MsgSsrGriddedCorrectionDepA(MsgSsrGriddedCorrectionDepA),
745    /// Deprecated
746    MsgSsrStecCorrectionDep(MsgSsrStecCorrectionDep),
747    /// Gridded troposphere and STEC correction residuals
748    MsgSsrGriddedCorrection(MsgSsrGriddedCorrection),
749    /// STEC correction polynomial coefficients
750    MsgSsrStecCorrection(MsgSsrStecCorrection),
751    /// Gridded troposhere and STEC correction residuals bounds
752    MsgSsrGriddedCorrectionBounds(MsgSsrGriddedCorrectionBounds),
753    /// Deprecated
754    MsgSsrSatelliteApcDep(MsgSsrSatelliteApcDep),
755    /// Satellite antenna phase center corrections
756    MsgSsrSatelliteApc(MsgSsrSatelliteApc),
757    /// OSR corrections
758    MsgOsr(MsgOsr),
759    /// User data
760    MsgUserData(MsgUserData),
761    /// Raw IMU data
762    MsgImuRaw(MsgImuRaw),
763    /// Auxiliary IMU data
764    MsgImuAux(MsgImuAux),
765    /// Raw magnetometer data
766    MsgMagRaw(MsgMagRaw),
767    /// Vehicle forward (x-axis) velocity
768    MsgOdometry(MsgOdometry),
769    /// Accumulated wheeltick count message
770    MsgWheeltick(MsgWheeltick),
771    /// Compensated IMU data
772    MsgImuComp(MsgImuComp),
773    /// Deprecated
774    MsgSsrFlagHighLevelDepA(MsgSsrFlagHighLevelDepA),
775    /// High level integrity flags
776    MsgSsrFlagHighLevel(MsgSsrFlagHighLevel),
777    /// List of satellites which are faulty, per constellation
778    MsgSsrFlagSatellites(MsgSsrFlagSatellites),
779    /// List of grid points which are faulty
780    MsgSsrFlagTropoGridPoints(MsgSsrFlagTropoGridPoints),
781    /// List of grid points which are faulty
782    MsgSsrFlagIonoGridPoints(MsgSsrFlagIonoGridPoints),
783    /// List of all the LOS which are faulty
784    MsgSsrFlagIonoTileSatLos(MsgSsrFlagIonoTileSatLos),
785    /// List of all the grid points to satellite which are faulty
786    MsgSsrFlagIonoGridPointSatLos(MsgSsrFlagIonoGridPointSatLos),
787    /// Acknowledgement message in response to a request for corrections
788    MsgAcknowledge(MsgAcknowledge),
789    /// Deprecated
790    MsgEd25519SignatureDepA(MsgEd25519SignatureDepA),
791    /// Deprecated
792    MsgEd25519CertificateDep(MsgEd25519CertificateDep),
793    /// Deprecated
794    MsgEd25519SignatureDepB(MsgEd25519SignatureDepB),
795    /// An ECDSA certificate split over multiple messages
796    MsgEcdsaCertificate(MsgEcdsaCertificate),
797    /// Deprecated
798    MsgCertificateChainDep(MsgCertificateChainDep),
799    /// Deprecated
800    MsgEcdsaSignatureDepA(MsgEcdsaSignatureDepA),
801    /// Deprecated
802    MsgEcdsaSignatureDepB(MsgEcdsaSignatureDepB),
803    /// An ECDSA signature
804    MsgEcdsaSignature(MsgEcdsaSignature),
805    /// The certificate chain
806    MsgCertificateChain(MsgCertificateChain),
807    /// AES-CMAC 128 digital signature
808    MsgAesCmacSignature(MsgAesCmacSignature),
809    /// Request advice on the optimal configuration for FileIO
810    MsgFileioConfigReq(MsgFileioConfigReq),
811    /// Response with advice on the optimal configuration for FileIO.
812    MsgFileioConfigResp(MsgFileioConfigResp),
813    /// Raw SBAS data
814    MsgSbasRaw(MsgSbasRaw),
815    /// Deprecated
816    MsgLinuxCpuStateDepA(MsgLinuxCpuStateDepA),
817    /// Deprecated
818    MsgLinuxMemStateDepA(MsgLinuxMemStateDepA),
819    /// Deprecated
820    MsgLinuxSysStateDepA(MsgLinuxSysStateDepA),
821    /// A list of processes with high socket counts
822    MsgLinuxProcessSocketCounts(MsgLinuxProcessSocketCounts),
823    /// A list of processes with deep socket queues
824    MsgLinuxProcessSocketQueues(MsgLinuxProcessSocketQueues),
825    /// Summary of socket usage across the system
826    MsgLinuxSocketUsage(MsgLinuxSocketUsage),
827    /// Summary of processes with large amounts of open file descriptors
828    MsgLinuxProcessFdCount(MsgLinuxProcessFdCount),
829    /// Summary of open file descriptors on the system
830    MsgLinuxProcessFdSummary(MsgLinuxProcessFdSummary),
831    /// List CPU state on the system
832    MsgLinuxCpuState(MsgLinuxCpuState),
833    /// List memory state on the system
834    MsgLinuxMemState(MsgLinuxMemState),
835    /// CPU, Memory and Process Starts/Stops
836    MsgLinuxSysState(MsgLinuxSysState),
837    /// Profiling Measurement Point
838    MsgMeasurementPoint(MsgMeasurementPoint),
839    /// System Profiling Information
840    MsgProfilingSystemInfo(MsgProfilingSystemInfo),
841    /// Thread Profiling Information
842    MsgProfilingThreadInfo(MsgProfilingThreadInfo),
843    /// Information about resource buckets
844    MsgProfilingResourceCounter(MsgProfilingResourceCounter),
845    /// System start-up message
846    MsgStartup(MsgStartup),
847    /// Status of received corrections
848    MsgDgnssStatus(MsgDgnssStatus),
849    /// Inertial Navigation System status message
850    MsgInsStatus(MsgInsStatus),
851    /// Experimental telemetry message
852    MsgCsacTelemetry(MsgCsacTelemetry),
853    /// Experimental telemetry message labels
854    MsgCsacTelemetryLabels(MsgCsacTelemetryLabels),
855    /// Inertial Navigation System update status message
856    MsgInsUpdates(MsgInsUpdates),
857    /// Offset of the local time with respect to GNSS time
858    MsgGnssTimeOffset(MsgGnssTimeOffset),
859    /// Local time at detection of PPS pulse
860    MsgPpsTime(MsgPpsTime),
861    /// Sensor state and update status data
862    MsgSensorAidEvent(MsgSensorAidEvent),
863    /// Solution Group Metadata
864    MsgGroupMeta(MsgGroupMeta),
865    /// Solution Sensors Metadata
866    MsgSolnMeta(MsgSolnMeta),
867    /// Deprecated
868    MsgSolnMetaDepA(MsgSolnMetaDepA),
869    /// Status report journal
870    MsgStatusJournal(MsgStatusJournal),
871    /// Status report message
872    MsgStatusReport(MsgStatusReport),
873    /// System heartbeat message
874    MsgHeartbeat(MsgHeartbeat),
875    /// Unknown message type
876    Unknown(Unknown),
877    /// Invalid message type.
878    Invalid(Invalid),
879}
880
881#[cfg(feature = "serde_json")]
882impl<'de> serde::Deserialize<'de> for Sbp {
883    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
884    where
885        D: serde::Deserializer<'de>,
886    {
887        let value = serde_json::Value::deserialize(deserializer)?;
888        match value
889            .get("msg_type")
890            .and_then(|v| v.as_u64())
891            .and_then(|v| v.try_into().ok())
892        {
893            Some(MsgPrintDep::MESSAGE_TYPE) => {
894                serde_json::from_value::<MsgPrintDep>(value).map(Sbp::MsgPrintDep)
895            }
896            Some(MsgTrackingStateDetailedDep::MESSAGE_TYPE) => {
897                serde_json::from_value::<MsgTrackingStateDetailedDep>(value)
898                    .map(Sbp::MsgTrackingStateDetailedDep)
899            }
900            Some(MsgTrackingStateDepB::MESSAGE_TYPE) => {
901                serde_json::from_value::<MsgTrackingStateDepB>(value).map(Sbp::MsgTrackingStateDepB)
902            }
903            Some(MsgAcqResultDepB::MESSAGE_TYPE) => {
904                serde_json::from_value::<MsgAcqResultDepB>(value).map(Sbp::MsgAcqResultDepB)
905            }
906            Some(MsgAcqResultDepA::MESSAGE_TYPE) => {
907                serde_json::from_value::<MsgAcqResultDepA>(value).map(Sbp::MsgAcqResultDepA)
908            }
909            Some(MsgTrackingStateDepA::MESSAGE_TYPE) => {
910                serde_json::from_value::<MsgTrackingStateDepA>(value).map(Sbp::MsgTrackingStateDepA)
911            }
912            Some(MsgThreadState::MESSAGE_TYPE) => {
913                serde_json::from_value::<MsgThreadState>(value).map(Sbp::MsgThreadState)
914            }
915            Some(MsgUartStateDepa::MESSAGE_TYPE) => {
916                serde_json::from_value::<MsgUartStateDepa>(value).map(Sbp::MsgUartStateDepa)
917            }
918            Some(MsgIarState::MESSAGE_TYPE) => {
919                serde_json::from_value::<MsgIarState>(value).map(Sbp::MsgIarState)
920            }
921            Some(MsgEphemerisDepA::MESSAGE_TYPE) => {
922                serde_json::from_value::<MsgEphemerisDepA>(value).map(Sbp::MsgEphemerisDepA)
923            }
924            Some(MsgMaskSatelliteDep::MESSAGE_TYPE) => {
925                serde_json::from_value::<MsgMaskSatelliteDep>(value).map(Sbp::MsgMaskSatelliteDep)
926            }
927            Some(MsgTrackingIqDepA::MESSAGE_TYPE) => {
928                serde_json::from_value::<MsgTrackingIqDepA>(value).map(Sbp::MsgTrackingIqDepA)
929            }
930            Some(MsgUartState::MESSAGE_TYPE) => {
931                serde_json::from_value::<MsgUartState>(value).map(Sbp::MsgUartState)
932            }
933            Some(MsgAcqSvProfileDep::MESSAGE_TYPE) => {
934                serde_json::from_value::<MsgAcqSvProfileDep>(value).map(Sbp::MsgAcqSvProfileDep)
935            }
936            Some(MsgAcqResultDepC::MESSAGE_TYPE) => {
937                serde_json::from_value::<MsgAcqResultDepC>(value).map(Sbp::MsgAcqResultDepC)
938            }
939            Some(MsgTrackingStateDetailedDepA::MESSAGE_TYPE) => {
940                serde_json::from_value::<MsgTrackingStateDetailedDepA>(value)
941                    .map(Sbp::MsgTrackingStateDetailedDepA)
942            }
943            Some(MsgResetFilters::MESSAGE_TYPE) => {
944                serde_json::from_value::<MsgResetFilters>(value).map(Sbp::MsgResetFilters)
945            }
946            Some(MsgInitBaseDep::MESSAGE_TYPE) => {
947                serde_json::from_value::<MsgInitBaseDep>(value).map(Sbp::MsgInitBaseDep)
948            }
949            Some(MsgMaskSatellite::MESSAGE_TYPE) => {
950                serde_json::from_value::<MsgMaskSatellite>(value).map(Sbp::MsgMaskSatellite)
951            }
952            Some(MsgTrackingIqDepB::MESSAGE_TYPE) => {
953                serde_json::from_value::<MsgTrackingIqDepB>(value).map(Sbp::MsgTrackingIqDepB)
954            }
955            Some(MsgTrackingIq::MESSAGE_TYPE) => {
956                serde_json::from_value::<MsgTrackingIq>(value).map(Sbp::MsgTrackingIq)
957            }
958            Some(MsgAcqSvProfile::MESSAGE_TYPE) => {
959                serde_json::from_value::<MsgAcqSvProfile>(value).map(Sbp::MsgAcqSvProfile)
960            }
961            Some(MsgAcqResult::MESSAGE_TYPE) => {
962                serde_json::from_value::<MsgAcqResult>(value).map(Sbp::MsgAcqResult)
963            }
964            Some(MsgTrackingState::MESSAGE_TYPE) => {
965                serde_json::from_value::<MsgTrackingState>(value).map(Sbp::MsgTrackingState)
966            }
967            Some(MsgObsDepB::MESSAGE_TYPE) => {
968                serde_json::from_value::<MsgObsDepB>(value).map(Sbp::MsgObsDepB)
969            }
970            Some(MsgBasePosLlh::MESSAGE_TYPE) => {
971                serde_json::from_value::<MsgBasePosLlh>(value).map(Sbp::MsgBasePosLlh)
972            }
973            Some(MsgObsDepA::MESSAGE_TYPE) => {
974                serde_json::from_value::<MsgObsDepA>(value).map(Sbp::MsgObsDepA)
975            }
976            Some(MsgEphemerisDepB::MESSAGE_TYPE) => {
977                serde_json::from_value::<MsgEphemerisDepB>(value).map(Sbp::MsgEphemerisDepB)
978            }
979            Some(MsgEphemerisDepC::MESSAGE_TYPE) => {
980                serde_json::from_value::<MsgEphemerisDepC>(value).map(Sbp::MsgEphemerisDepC)
981            }
982            Some(MsgBasePosEcef::MESSAGE_TYPE) => {
983                serde_json::from_value::<MsgBasePosEcef>(value).map(Sbp::MsgBasePosEcef)
984            }
985            Some(MsgObsDepC::MESSAGE_TYPE) => {
986                serde_json::from_value::<MsgObsDepC>(value).map(Sbp::MsgObsDepC)
987            }
988            Some(MsgObs::MESSAGE_TYPE) => serde_json::from_value::<MsgObs>(value).map(Sbp::MsgObs),
989            Some(MsgSpecanDep::MESSAGE_TYPE) => {
990                serde_json::from_value::<MsgSpecanDep>(value).map(Sbp::MsgSpecanDep)
991            }
992            Some(MsgSpecan::MESSAGE_TYPE) => {
993                serde_json::from_value::<MsgSpecan>(value).map(Sbp::MsgSpecan)
994            }
995            Some(MsgMeasurementState::MESSAGE_TYPE) => {
996                serde_json::from_value::<MsgMeasurementState>(value).map(Sbp::MsgMeasurementState)
997            }
998            Some(MsgSetTime::MESSAGE_TYPE) => {
999                serde_json::from_value::<MsgSetTime>(value).map(Sbp::MsgSetTime)
1000            }
1001            Some(MsgAlmanac::MESSAGE_TYPE) => {
1002                serde_json::from_value::<MsgAlmanac>(value).map(Sbp::MsgAlmanac)
1003            }
1004            Some(MsgAlmanacGpsDep::MESSAGE_TYPE) => {
1005                serde_json::from_value::<MsgAlmanacGpsDep>(value).map(Sbp::MsgAlmanacGpsDep)
1006            }
1007            Some(MsgAlmanacGloDep::MESSAGE_TYPE) => {
1008                serde_json::from_value::<MsgAlmanacGloDep>(value).map(Sbp::MsgAlmanacGloDep)
1009            }
1010            Some(MsgAlmanacGps::MESSAGE_TYPE) => {
1011                serde_json::from_value::<MsgAlmanacGps>(value).map(Sbp::MsgAlmanacGps)
1012            }
1013            Some(MsgAlmanacGlo::MESSAGE_TYPE) => {
1014                serde_json::from_value::<MsgAlmanacGlo>(value).map(Sbp::MsgAlmanacGlo)
1015            }
1016            Some(MsgGloBiases::MESSAGE_TYPE) => {
1017                serde_json::from_value::<MsgGloBiases>(value).map(Sbp::MsgGloBiases)
1018            }
1019            Some(MsgEphemerisDepD::MESSAGE_TYPE) => {
1020                serde_json::from_value::<MsgEphemerisDepD>(value).map(Sbp::MsgEphemerisDepD)
1021            }
1022            Some(MsgEphemerisGpsDepE::MESSAGE_TYPE) => {
1023                serde_json::from_value::<MsgEphemerisGpsDepE>(value).map(Sbp::MsgEphemerisGpsDepE)
1024            }
1025            Some(MsgEphemerisSbasDepA::MESSAGE_TYPE) => {
1026                serde_json::from_value::<MsgEphemerisSbasDepA>(value).map(Sbp::MsgEphemerisSbasDepA)
1027            }
1028            Some(MsgEphemerisGloDepA::MESSAGE_TYPE) => {
1029                serde_json::from_value::<MsgEphemerisGloDepA>(value).map(Sbp::MsgEphemerisGloDepA)
1030            }
1031            Some(MsgEphemerisSbasDepB::MESSAGE_TYPE) => {
1032                serde_json::from_value::<MsgEphemerisSbasDepB>(value).map(Sbp::MsgEphemerisSbasDepB)
1033            }
1034            Some(MsgEphemerisGloDepB::MESSAGE_TYPE) => {
1035                serde_json::from_value::<MsgEphemerisGloDepB>(value).map(Sbp::MsgEphemerisGloDepB)
1036            }
1037            Some(MsgEphemerisGpsDepF::MESSAGE_TYPE) => {
1038                serde_json::from_value::<MsgEphemerisGpsDepF>(value).map(Sbp::MsgEphemerisGpsDepF)
1039            }
1040            Some(MsgEphemerisGloDepC::MESSAGE_TYPE) => {
1041                serde_json::from_value::<MsgEphemerisGloDepC>(value).map(Sbp::MsgEphemerisGloDepC)
1042            }
1043            Some(MsgEphemerisGloDepD::MESSAGE_TYPE) => {
1044                serde_json::from_value::<MsgEphemerisGloDepD>(value).map(Sbp::MsgEphemerisGloDepD)
1045            }
1046            Some(MsgEphemerisBds::MESSAGE_TYPE) => {
1047                serde_json::from_value::<MsgEphemerisBds>(value).map(Sbp::MsgEphemerisBds)
1048            }
1049            Some(MsgEphemerisGps::MESSAGE_TYPE) => {
1050                serde_json::from_value::<MsgEphemerisGps>(value).map(Sbp::MsgEphemerisGps)
1051            }
1052            Some(MsgEphemerisGlo::MESSAGE_TYPE) => {
1053                serde_json::from_value::<MsgEphemerisGlo>(value).map(Sbp::MsgEphemerisGlo)
1054            }
1055            Some(MsgEphemerisSbas::MESSAGE_TYPE) => {
1056                serde_json::from_value::<MsgEphemerisSbas>(value).map(Sbp::MsgEphemerisSbas)
1057            }
1058            Some(MsgEphemerisGal::MESSAGE_TYPE) => {
1059                serde_json::from_value::<MsgEphemerisGal>(value).map(Sbp::MsgEphemerisGal)
1060            }
1061            Some(MsgEphemerisQzss::MESSAGE_TYPE) => {
1062                serde_json::from_value::<MsgEphemerisQzss>(value).map(Sbp::MsgEphemerisQzss)
1063            }
1064            Some(MsgIono::MESSAGE_TYPE) => {
1065                serde_json::from_value::<MsgIono>(value).map(Sbp::MsgIono)
1066            }
1067            Some(MsgSvConfigurationGpsDep::MESSAGE_TYPE) => {
1068                serde_json::from_value::<MsgSvConfigurationGpsDep>(value)
1069                    .map(Sbp::MsgSvConfigurationGpsDep)
1070            }
1071            Some(MsgGroupDelayDepA::MESSAGE_TYPE) => {
1072                serde_json::from_value::<MsgGroupDelayDepA>(value).map(Sbp::MsgGroupDelayDepA)
1073            }
1074            Some(MsgGroupDelayDepB::MESSAGE_TYPE) => {
1075                serde_json::from_value::<MsgGroupDelayDepB>(value).map(Sbp::MsgGroupDelayDepB)
1076            }
1077            Some(MsgGroupDelay::MESSAGE_TYPE) => {
1078                serde_json::from_value::<MsgGroupDelay>(value).map(Sbp::MsgGroupDelay)
1079            }
1080            Some(MsgEphemerisGalDepA::MESSAGE_TYPE) => {
1081                serde_json::from_value::<MsgEphemerisGalDepA>(value).map(Sbp::MsgEphemerisGalDepA)
1082            }
1083            Some(MsgGnssCapb::MESSAGE_TYPE) => {
1084                serde_json::from_value::<MsgGnssCapb>(value).map(Sbp::MsgGnssCapb)
1085            }
1086            Some(MsgSvAzEl::MESSAGE_TYPE) => {
1087                serde_json::from_value::<MsgSvAzEl>(value).map(Sbp::MsgSvAzEl)
1088            }
1089            Some(MsgSettingsWrite::MESSAGE_TYPE) => {
1090                serde_json::from_value::<MsgSettingsWrite>(value).map(Sbp::MsgSettingsWrite)
1091            }
1092            Some(MsgSettingsSave::MESSAGE_TYPE) => {
1093                serde_json::from_value::<MsgSettingsSave>(value).map(Sbp::MsgSettingsSave)
1094            }
1095            Some(MsgSettingsReadByIndexReq::MESSAGE_TYPE) => {
1096                serde_json::from_value::<MsgSettingsReadByIndexReq>(value)
1097                    .map(Sbp::MsgSettingsReadByIndexReq)
1098            }
1099            Some(MsgFileioReadResp::MESSAGE_TYPE) => {
1100                serde_json::from_value::<MsgFileioReadResp>(value).map(Sbp::MsgFileioReadResp)
1101            }
1102            Some(MsgSettingsReadReq::MESSAGE_TYPE) => {
1103                serde_json::from_value::<MsgSettingsReadReq>(value).map(Sbp::MsgSettingsReadReq)
1104            }
1105            Some(MsgSettingsReadResp::MESSAGE_TYPE) => {
1106                serde_json::from_value::<MsgSettingsReadResp>(value).map(Sbp::MsgSettingsReadResp)
1107            }
1108            Some(MsgSettingsReadByIndexDone::MESSAGE_TYPE) => {
1109                serde_json::from_value::<MsgSettingsReadByIndexDone>(value)
1110                    .map(Sbp::MsgSettingsReadByIndexDone)
1111            }
1112            Some(MsgSettingsReadByIndexResp::MESSAGE_TYPE) => {
1113                serde_json::from_value::<MsgSettingsReadByIndexResp>(value)
1114                    .map(Sbp::MsgSettingsReadByIndexResp)
1115            }
1116            Some(MsgFileioReadReq::MESSAGE_TYPE) => {
1117                serde_json::from_value::<MsgFileioReadReq>(value).map(Sbp::MsgFileioReadReq)
1118            }
1119            Some(MsgFileioReadDirReq::MESSAGE_TYPE) => {
1120                serde_json::from_value::<MsgFileioReadDirReq>(value).map(Sbp::MsgFileioReadDirReq)
1121            }
1122            Some(MsgFileioReadDirResp::MESSAGE_TYPE) => {
1123                serde_json::from_value::<MsgFileioReadDirResp>(value).map(Sbp::MsgFileioReadDirResp)
1124            }
1125            Some(MsgFileioWriteResp::MESSAGE_TYPE) => {
1126                serde_json::from_value::<MsgFileioWriteResp>(value).map(Sbp::MsgFileioWriteResp)
1127            }
1128            Some(MsgFileioRemove::MESSAGE_TYPE) => {
1129                serde_json::from_value::<MsgFileioRemove>(value).map(Sbp::MsgFileioRemove)
1130            }
1131            Some(MsgFileioWriteReq::MESSAGE_TYPE) => {
1132                serde_json::from_value::<MsgFileioWriteReq>(value).map(Sbp::MsgFileioWriteReq)
1133            }
1134            Some(MsgSettingsRegister::MESSAGE_TYPE) => {
1135                serde_json::from_value::<MsgSettingsRegister>(value).map(Sbp::MsgSettingsRegister)
1136            }
1137            Some(MsgSettingsWriteResp::MESSAGE_TYPE) => {
1138                serde_json::from_value::<MsgSettingsWriteResp>(value).map(Sbp::MsgSettingsWriteResp)
1139            }
1140            Some(MsgBootloaderHandshakeDepA::MESSAGE_TYPE) => {
1141                serde_json::from_value::<MsgBootloaderHandshakeDepA>(value)
1142                    .map(Sbp::MsgBootloaderHandshakeDepA)
1143            }
1144            Some(MsgBootloaderJumpToApp::MESSAGE_TYPE) => {
1145                serde_json::from_value::<MsgBootloaderJumpToApp>(value)
1146                    .map(Sbp::MsgBootloaderJumpToApp)
1147            }
1148            Some(MsgResetDep::MESSAGE_TYPE) => {
1149                serde_json::from_value::<MsgResetDep>(value).map(Sbp::MsgResetDep)
1150            }
1151            Some(MsgBootloaderHandshakeReq::MESSAGE_TYPE) => {
1152                serde_json::from_value::<MsgBootloaderHandshakeReq>(value)
1153                    .map(Sbp::MsgBootloaderHandshakeReq)
1154            }
1155            Some(MsgBootloaderHandshakeResp::MESSAGE_TYPE) => {
1156                serde_json::from_value::<MsgBootloaderHandshakeResp>(value)
1157                    .map(Sbp::MsgBootloaderHandshakeResp)
1158            }
1159            Some(MsgDeviceMonitor::MESSAGE_TYPE) => {
1160                serde_json::from_value::<MsgDeviceMonitor>(value).map(Sbp::MsgDeviceMonitor)
1161            }
1162            Some(MsgReset::MESSAGE_TYPE) => {
1163                serde_json::from_value::<MsgReset>(value).map(Sbp::MsgReset)
1164            }
1165            Some(MsgCommandReq::MESSAGE_TYPE) => {
1166                serde_json::from_value::<MsgCommandReq>(value).map(Sbp::MsgCommandReq)
1167            }
1168            Some(MsgCommandResp::MESSAGE_TYPE) => {
1169                serde_json::from_value::<MsgCommandResp>(value).map(Sbp::MsgCommandResp)
1170            }
1171            Some(MsgNetworkStateReq::MESSAGE_TYPE) => {
1172                serde_json::from_value::<MsgNetworkStateReq>(value).map(Sbp::MsgNetworkStateReq)
1173            }
1174            Some(MsgNetworkStateResp::MESSAGE_TYPE) => {
1175                serde_json::from_value::<MsgNetworkStateResp>(value).map(Sbp::MsgNetworkStateResp)
1176            }
1177            Some(MsgCommandOutput::MESSAGE_TYPE) => {
1178                serde_json::from_value::<MsgCommandOutput>(value).map(Sbp::MsgCommandOutput)
1179            }
1180            Some(MsgNetworkBandwidthUsage::MESSAGE_TYPE) => {
1181                serde_json::from_value::<MsgNetworkBandwidthUsage>(value)
1182                    .map(Sbp::MsgNetworkBandwidthUsage)
1183            }
1184            Some(MsgCellModemStatus::MESSAGE_TYPE) => {
1185                serde_json::from_value::<MsgCellModemStatus>(value).map(Sbp::MsgCellModemStatus)
1186            }
1187            Some(MsgFrontEndGain::MESSAGE_TYPE) => {
1188                serde_json::from_value::<MsgFrontEndGain>(value).map(Sbp::MsgFrontEndGain)
1189            }
1190            Some(MsgCwResults::MESSAGE_TYPE) => {
1191                serde_json::from_value::<MsgCwResults>(value).map(Sbp::MsgCwResults)
1192            }
1193            Some(MsgCwStart::MESSAGE_TYPE) => {
1194                serde_json::from_value::<MsgCwStart>(value).map(Sbp::MsgCwStart)
1195            }
1196            Some(MsgNapDeviceDnaResp::MESSAGE_TYPE) => {
1197                serde_json::from_value::<MsgNapDeviceDnaResp>(value).map(Sbp::MsgNapDeviceDnaResp)
1198            }
1199            Some(MsgNapDeviceDnaReq::MESSAGE_TYPE) => {
1200                serde_json::from_value::<MsgNapDeviceDnaReq>(value).map(Sbp::MsgNapDeviceDnaReq)
1201            }
1202            Some(MsgFlashDone::MESSAGE_TYPE) => {
1203                serde_json::from_value::<MsgFlashDone>(value).map(Sbp::MsgFlashDone)
1204            }
1205            Some(MsgFlashReadResp::MESSAGE_TYPE) => {
1206                serde_json::from_value::<MsgFlashReadResp>(value).map(Sbp::MsgFlashReadResp)
1207            }
1208            Some(MsgFlashErase::MESSAGE_TYPE) => {
1209                serde_json::from_value::<MsgFlashErase>(value).map(Sbp::MsgFlashErase)
1210            }
1211            Some(MsgStmFlashLockSector::MESSAGE_TYPE) => {
1212                serde_json::from_value::<MsgStmFlashLockSector>(value)
1213                    .map(Sbp::MsgStmFlashLockSector)
1214            }
1215            Some(MsgStmFlashUnlockSector::MESSAGE_TYPE) => {
1216                serde_json::from_value::<MsgStmFlashUnlockSector>(value)
1217                    .map(Sbp::MsgStmFlashUnlockSector)
1218            }
1219            Some(MsgStmUniqueIdResp::MESSAGE_TYPE) => {
1220                serde_json::from_value::<MsgStmUniqueIdResp>(value).map(Sbp::MsgStmUniqueIdResp)
1221            }
1222            Some(MsgFlashProgram::MESSAGE_TYPE) => {
1223                serde_json::from_value::<MsgFlashProgram>(value).map(Sbp::MsgFlashProgram)
1224            }
1225            Some(MsgFlashReadReq::MESSAGE_TYPE) => {
1226                serde_json::from_value::<MsgFlashReadReq>(value).map(Sbp::MsgFlashReadReq)
1227            }
1228            Some(MsgStmUniqueIdReq::MESSAGE_TYPE) => {
1229                serde_json::from_value::<MsgStmUniqueIdReq>(value).map(Sbp::MsgStmUniqueIdReq)
1230            }
1231            Some(MsgM25FlashWriteStatus::MESSAGE_TYPE) => {
1232                serde_json::from_value::<MsgM25FlashWriteStatus>(value)
1233                    .map(Sbp::MsgM25FlashWriteStatus)
1234            }
1235            Some(MsgGpsTimeDepA::MESSAGE_TYPE) => {
1236                serde_json::from_value::<MsgGpsTimeDepA>(value).map(Sbp::MsgGpsTimeDepA)
1237            }
1238            Some(MsgExtEvent::MESSAGE_TYPE) => {
1239                serde_json::from_value::<MsgExtEvent>(value).map(Sbp::MsgExtEvent)
1240            }
1241            Some(MsgGpsTime::MESSAGE_TYPE) => {
1242                serde_json::from_value::<MsgGpsTime>(value).map(Sbp::MsgGpsTime)
1243            }
1244            Some(MsgUtcTime::MESSAGE_TYPE) => {
1245                serde_json::from_value::<MsgUtcTime>(value).map(Sbp::MsgUtcTime)
1246            }
1247            Some(MsgGpsTimeGnss::MESSAGE_TYPE) => {
1248                serde_json::from_value::<MsgGpsTimeGnss>(value).map(Sbp::MsgGpsTimeGnss)
1249            }
1250            Some(MsgUtcTimeGnss::MESSAGE_TYPE) => {
1251                serde_json::from_value::<MsgUtcTimeGnss>(value).map(Sbp::MsgUtcTimeGnss)
1252            }
1253            Some(MsgTelSv::MESSAGE_TYPE) => {
1254                serde_json::from_value::<MsgTelSv>(value).map(Sbp::MsgTelSv)
1255            }
1256            Some(MsgSettingsRegisterResp::MESSAGE_TYPE) => {
1257                serde_json::from_value::<MsgSettingsRegisterResp>(value)
1258                    .map(Sbp::MsgSettingsRegisterResp)
1259            }
1260            Some(MsgPosEcefDepA::MESSAGE_TYPE) => {
1261                serde_json::from_value::<MsgPosEcefDepA>(value).map(Sbp::MsgPosEcefDepA)
1262            }
1263            Some(MsgPosLlhDepA::MESSAGE_TYPE) => {
1264                serde_json::from_value::<MsgPosLlhDepA>(value).map(Sbp::MsgPosLlhDepA)
1265            }
1266            Some(MsgBaselineEcefDepA::MESSAGE_TYPE) => {
1267                serde_json::from_value::<MsgBaselineEcefDepA>(value).map(Sbp::MsgBaselineEcefDepA)
1268            }
1269            Some(MsgBaselineNedDepA::MESSAGE_TYPE) => {
1270                serde_json::from_value::<MsgBaselineNedDepA>(value).map(Sbp::MsgBaselineNedDepA)
1271            }
1272            Some(MsgVelEcefDepA::MESSAGE_TYPE) => {
1273                serde_json::from_value::<MsgVelEcefDepA>(value).map(Sbp::MsgVelEcefDepA)
1274            }
1275            Some(MsgVelNedDepA::MESSAGE_TYPE) => {
1276                serde_json::from_value::<MsgVelNedDepA>(value).map(Sbp::MsgVelNedDepA)
1277            }
1278            Some(MsgDopsDepA::MESSAGE_TYPE) => {
1279                serde_json::from_value::<MsgDopsDepA>(value).map(Sbp::MsgDopsDepA)
1280            }
1281            Some(MsgBaselineHeadingDepA::MESSAGE_TYPE) => {
1282                serde_json::from_value::<MsgBaselineHeadingDepA>(value)
1283                    .map(Sbp::MsgBaselineHeadingDepA)
1284            }
1285            Some(MsgDops::MESSAGE_TYPE) => {
1286                serde_json::from_value::<MsgDops>(value).map(Sbp::MsgDops)
1287            }
1288            Some(MsgPosEcef::MESSAGE_TYPE) => {
1289                serde_json::from_value::<MsgPosEcef>(value).map(Sbp::MsgPosEcef)
1290            }
1291            Some(MsgPosLlh::MESSAGE_TYPE) => {
1292                serde_json::from_value::<MsgPosLlh>(value).map(Sbp::MsgPosLlh)
1293            }
1294            Some(MsgBaselineEcef::MESSAGE_TYPE) => {
1295                serde_json::from_value::<MsgBaselineEcef>(value).map(Sbp::MsgBaselineEcef)
1296            }
1297            Some(MsgBaselineNed::MESSAGE_TYPE) => {
1298                serde_json::from_value::<MsgBaselineNed>(value).map(Sbp::MsgBaselineNed)
1299            }
1300            Some(MsgVelEcef::MESSAGE_TYPE) => {
1301                serde_json::from_value::<MsgVelEcef>(value).map(Sbp::MsgVelEcef)
1302            }
1303            Some(MsgVelNed::MESSAGE_TYPE) => {
1304                serde_json::from_value::<MsgVelNed>(value).map(Sbp::MsgVelNed)
1305            }
1306            Some(MsgBaselineHeading::MESSAGE_TYPE) => {
1307                serde_json::from_value::<MsgBaselineHeading>(value).map(Sbp::MsgBaselineHeading)
1308            }
1309            Some(MsgAgeCorrections::MESSAGE_TYPE) => {
1310                serde_json::from_value::<MsgAgeCorrections>(value).map(Sbp::MsgAgeCorrections)
1311            }
1312            Some(MsgPosLlhCov::MESSAGE_TYPE) => {
1313                serde_json::from_value::<MsgPosLlhCov>(value).map(Sbp::MsgPosLlhCov)
1314            }
1315            Some(MsgVelNedCov::MESSAGE_TYPE) => {
1316                serde_json::from_value::<MsgVelNedCov>(value).map(Sbp::MsgVelNedCov)
1317            }
1318            Some(MsgVelBody::MESSAGE_TYPE) => {
1319                serde_json::from_value::<MsgVelBody>(value).map(Sbp::MsgVelBody)
1320            }
1321            Some(MsgPosEcefCov::MESSAGE_TYPE) => {
1322                serde_json::from_value::<MsgPosEcefCov>(value).map(Sbp::MsgPosEcefCov)
1323            }
1324            Some(MsgVelEcefCov::MESSAGE_TYPE) => {
1325                serde_json::from_value::<MsgVelEcefCov>(value).map(Sbp::MsgVelEcefCov)
1326            }
1327            Some(MsgProtectionLevelDepA::MESSAGE_TYPE) => {
1328                serde_json::from_value::<MsgProtectionLevelDepA>(value)
1329                    .map(Sbp::MsgProtectionLevelDepA)
1330            }
1331            Some(MsgProtectionLevel::MESSAGE_TYPE) => {
1332                serde_json::from_value::<MsgProtectionLevel>(value).map(Sbp::MsgProtectionLevel)
1333            }
1334            Some(MsgPosLlhAcc::MESSAGE_TYPE) => {
1335                serde_json::from_value::<MsgPosLlhAcc>(value).map(Sbp::MsgPosLlhAcc)
1336            }
1337            Some(MsgVelCog::MESSAGE_TYPE) => {
1338                serde_json::from_value::<MsgVelCog>(value).map(Sbp::MsgVelCog)
1339            }
1340            Some(MsgOrientQuat::MESSAGE_TYPE) => {
1341                serde_json::from_value::<MsgOrientQuat>(value).map(Sbp::MsgOrientQuat)
1342            }
1343            Some(MsgOrientEuler::MESSAGE_TYPE) => {
1344                serde_json::from_value::<MsgOrientEuler>(value).map(Sbp::MsgOrientEuler)
1345            }
1346            Some(MsgAngularRate::MESSAGE_TYPE) => {
1347                serde_json::from_value::<MsgAngularRate>(value).map(Sbp::MsgAngularRate)
1348            }
1349            Some(MsgPosEcefGnss::MESSAGE_TYPE) => {
1350                serde_json::from_value::<MsgPosEcefGnss>(value).map(Sbp::MsgPosEcefGnss)
1351            }
1352            Some(MsgPosLlhGnss::MESSAGE_TYPE) => {
1353                serde_json::from_value::<MsgPosLlhGnss>(value).map(Sbp::MsgPosLlhGnss)
1354            }
1355            Some(MsgVelEcefGnss::MESSAGE_TYPE) => {
1356                serde_json::from_value::<MsgVelEcefGnss>(value).map(Sbp::MsgVelEcefGnss)
1357            }
1358            Some(MsgVelNedGnss::MESSAGE_TYPE) => {
1359                serde_json::from_value::<MsgVelNedGnss>(value).map(Sbp::MsgVelNedGnss)
1360            }
1361            Some(MsgPosLlhCovGnss::MESSAGE_TYPE) => {
1362                serde_json::from_value::<MsgPosLlhCovGnss>(value).map(Sbp::MsgPosLlhCovGnss)
1363            }
1364            Some(MsgVelNedCovGnss::MESSAGE_TYPE) => {
1365                serde_json::from_value::<MsgVelNedCovGnss>(value).map(Sbp::MsgVelNedCovGnss)
1366            }
1367            Some(MsgPosEcefCovGnss::MESSAGE_TYPE) => {
1368                serde_json::from_value::<MsgPosEcefCovGnss>(value).map(Sbp::MsgPosEcefCovGnss)
1369            }
1370            Some(MsgVelEcefCovGnss::MESSAGE_TYPE) => {
1371                serde_json::from_value::<MsgVelEcefCovGnss>(value).map(Sbp::MsgVelEcefCovGnss)
1372            }
1373            Some(MsgUtcLeapSecond::MESSAGE_TYPE) => {
1374                serde_json::from_value::<MsgUtcLeapSecond>(value).map(Sbp::MsgUtcLeapSecond)
1375            }
1376            Some(MsgReferenceFrameParam::MESSAGE_TYPE) => {
1377                serde_json::from_value::<MsgReferenceFrameParam>(value)
1378                    .map(Sbp::MsgReferenceFrameParam)
1379            }
1380            Some(MsgPoseRelative::MESSAGE_TYPE) => {
1381                serde_json::from_value::<MsgPoseRelative>(value).map(Sbp::MsgPoseRelative)
1382            }
1383            Some(MsgNdbEvent::MESSAGE_TYPE) => {
1384                serde_json::from_value::<MsgNdbEvent>(value).map(Sbp::MsgNdbEvent)
1385            }
1386            Some(MsgLog::MESSAGE_TYPE) => serde_json::from_value::<MsgLog>(value).map(Sbp::MsgLog),
1387            Some(MsgFwd::MESSAGE_TYPE) => serde_json::from_value::<MsgFwd>(value).map(Sbp::MsgFwd),
1388            Some(MsgSsrOrbitClockDepA::MESSAGE_TYPE) => {
1389                serde_json::from_value::<MsgSsrOrbitClockDepA>(value).map(Sbp::MsgSsrOrbitClockDepA)
1390            }
1391            Some(MsgSsrOrbitClock::MESSAGE_TYPE) => {
1392                serde_json::from_value::<MsgSsrOrbitClock>(value).map(Sbp::MsgSsrOrbitClock)
1393            }
1394            Some(MsgSsrOrbitClockBounds::MESSAGE_TYPE) => {
1395                serde_json::from_value::<MsgSsrOrbitClockBounds>(value)
1396                    .map(Sbp::MsgSsrOrbitClockBounds)
1397            }
1398            Some(MsgSsrOrbitClockBoundsDegradation::MESSAGE_TYPE) => {
1399                serde_json::from_value::<MsgSsrOrbitClockBoundsDegradation>(value)
1400                    .map(Sbp::MsgSsrOrbitClockBoundsDegradation)
1401            }
1402            Some(MsgSsrCodeBiases::MESSAGE_TYPE) => {
1403                serde_json::from_value::<MsgSsrCodeBiases>(value).map(Sbp::MsgSsrCodeBiases)
1404            }
1405            Some(MsgSsrPhaseBiases::MESSAGE_TYPE) => {
1406                serde_json::from_value::<MsgSsrPhaseBiases>(value).map(Sbp::MsgSsrPhaseBiases)
1407            }
1408            Some(MsgSsrStecCorrectionDepA::MESSAGE_TYPE) => {
1409                serde_json::from_value::<MsgSsrStecCorrectionDepA>(value)
1410                    .map(Sbp::MsgSsrStecCorrectionDepA)
1411            }
1412            Some(MsgSsrCodePhaseBiasesBounds::MESSAGE_TYPE) => {
1413                serde_json::from_value::<MsgSsrCodePhaseBiasesBounds>(value)
1414                    .map(Sbp::MsgSsrCodePhaseBiasesBounds)
1415            }
1416            Some(MsgSsrGriddedCorrectionNoStdDepA::MESSAGE_TYPE) => {
1417                serde_json::from_value::<MsgSsrGriddedCorrectionNoStdDepA>(value)
1418                    .map(Sbp::MsgSsrGriddedCorrectionNoStdDepA)
1419            }
1420            Some(MsgSsrGridDefinitionDepA::MESSAGE_TYPE) => {
1421                serde_json::from_value::<MsgSsrGridDefinitionDepA>(value)
1422                    .map(Sbp::MsgSsrGridDefinitionDepA)
1423            }
1424            Some(MsgSsrTileDefinitionDepA::MESSAGE_TYPE) => {
1425                serde_json::from_value::<MsgSsrTileDefinitionDepA>(value)
1426                    .map(Sbp::MsgSsrTileDefinitionDepA)
1427            }
1428            Some(MsgSsrTileDefinitionDepB::MESSAGE_TYPE) => {
1429                serde_json::from_value::<MsgSsrTileDefinitionDepB>(value)
1430                    .map(Sbp::MsgSsrTileDefinitionDepB)
1431            }
1432            Some(MsgSsrTileDefinition::MESSAGE_TYPE) => {
1433                serde_json::from_value::<MsgSsrTileDefinition>(value).map(Sbp::MsgSsrTileDefinition)
1434            }
1435            Some(MsgSsrGriddedCorrectionDepA::MESSAGE_TYPE) => {
1436                serde_json::from_value::<MsgSsrGriddedCorrectionDepA>(value)
1437                    .map(Sbp::MsgSsrGriddedCorrectionDepA)
1438            }
1439            Some(MsgSsrStecCorrectionDep::MESSAGE_TYPE) => {
1440                serde_json::from_value::<MsgSsrStecCorrectionDep>(value)
1441                    .map(Sbp::MsgSsrStecCorrectionDep)
1442            }
1443            Some(MsgSsrGriddedCorrection::MESSAGE_TYPE) => {
1444                serde_json::from_value::<MsgSsrGriddedCorrection>(value)
1445                    .map(Sbp::MsgSsrGriddedCorrection)
1446            }
1447            Some(MsgSsrStecCorrection::MESSAGE_TYPE) => {
1448                serde_json::from_value::<MsgSsrStecCorrection>(value).map(Sbp::MsgSsrStecCorrection)
1449            }
1450            Some(MsgSsrGriddedCorrectionBounds::MESSAGE_TYPE) => {
1451                serde_json::from_value::<MsgSsrGriddedCorrectionBounds>(value)
1452                    .map(Sbp::MsgSsrGriddedCorrectionBounds)
1453            }
1454            Some(MsgSsrSatelliteApcDep::MESSAGE_TYPE) => {
1455                serde_json::from_value::<MsgSsrSatelliteApcDep>(value)
1456                    .map(Sbp::MsgSsrSatelliteApcDep)
1457            }
1458            Some(MsgSsrSatelliteApc::MESSAGE_TYPE) => {
1459                serde_json::from_value::<MsgSsrSatelliteApc>(value).map(Sbp::MsgSsrSatelliteApc)
1460            }
1461            Some(MsgOsr::MESSAGE_TYPE) => serde_json::from_value::<MsgOsr>(value).map(Sbp::MsgOsr),
1462            Some(MsgUserData::MESSAGE_TYPE) => {
1463                serde_json::from_value::<MsgUserData>(value).map(Sbp::MsgUserData)
1464            }
1465            Some(MsgImuRaw::MESSAGE_TYPE) => {
1466                serde_json::from_value::<MsgImuRaw>(value).map(Sbp::MsgImuRaw)
1467            }
1468            Some(MsgImuAux::MESSAGE_TYPE) => {
1469                serde_json::from_value::<MsgImuAux>(value).map(Sbp::MsgImuAux)
1470            }
1471            Some(MsgMagRaw::MESSAGE_TYPE) => {
1472                serde_json::from_value::<MsgMagRaw>(value).map(Sbp::MsgMagRaw)
1473            }
1474            Some(MsgOdometry::MESSAGE_TYPE) => {
1475                serde_json::from_value::<MsgOdometry>(value).map(Sbp::MsgOdometry)
1476            }
1477            Some(MsgWheeltick::MESSAGE_TYPE) => {
1478                serde_json::from_value::<MsgWheeltick>(value).map(Sbp::MsgWheeltick)
1479            }
1480            Some(MsgImuComp::MESSAGE_TYPE) => {
1481                serde_json::from_value::<MsgImuComp>(value).map(Sbp::MsgImuComp)
1482            }
1483            Some(MsgSsrFlagHighLevelDepA::MESSAGE_TYPE) => {
1484                serde_json::from_value::<MsgSsrFlagHighLevelDepA>(value)
1485                    .map(Sbp::MsgSsrFlagHighLevelDepA)
1486            }
1487            Some(MsgSsrFlagHighLevel::MESSAGE_TYPE) => {
1488                serde_json::from_value::<MsgSsrFlagHighLevel>(value).map(Sbp::MsgSsrFlagHighLevel)
1489            }
1490            Some(MsgSsrFlagSatellites::MESSAGE_TYPE) => {
1491                serde_json::from_value::<MsgSsrFlagSatellites>(value).map(Sbp::MsgSsrFlagSatellites)
1492            }
1493            Some(MsgSsrFlagTropoGridPoints::MESSAGE_TYPE) => {
1494                serde_json::from_value::<MsgSsrFlagTropoGridPoints>(value)
1495                    .map(Sbp::MsgSsrFlagTropoGridPoints)
1496            }
1497            Some(MsgSsrFlagIonoGridPoints::MESSAGE_TYPE) => {
1498                serde_json::from_value::<MsgSsrFlagIonoGridPoints>(value)
1499                    .map(Sbp::MsgSsrFlagIonoGridPoints)
1500            }
1501            Some(MsgSsrFlagIonoTileSatLos::MESSAGE_TYPE) => {
1502                serde_json::from_value::<MsgSsrFlagIonoTileSatLos>(value)
1503                    .map(Sbp::MsgSsrFlagIonoTileSatLos)
1504            }
1505            Some(MsgSsrFlagIonoGridPointSatLos::MESSAGE_TYPE) => {
1506                serde_json::from_value::<MsgSsrFlagIonoGridPointSatLos>(value)
1507                    .map(Sbp::MsgSsrFlagIonoGridPointSatLos)
1508            }
1509            Some(MsgAcknowledge::MESSAGE_TYPE) => {
1510                serde_json::from_value::<MsgAcknowledge>(value).map(Sbp::MsgAcknowledge)
1511            }
1512            Some(MsgEd25519SignatureDepA::MESSAGE_TYPE) => {
1513                serde_json::from_value::<MsgEd25519SignatureDepA>(value)
1514                    .map(Sbp::MsgEd25519SignatureDepA)
1515            }
1516            Some(MsgEd25519CertificateDep::MESSAGE_TYPE) => {
1517                serde_json::from_value::<MsgEd25519CertificateDep>(value)
1518                    .map(Sbp::MsgEd25519CertificateDep)
1519            }
1520            Some(MsgEd25519SignatureDepB::MESSAGE_TYPE) => {
1521                serde_json::from_value::<MsgEd25519SignatureDepB>(value)
1522                    .map(Sbp::MsgEd25519SignatureDepB)
1523            }
1524            Some(MsgEcdsaCertificate::MESSAGE_TYPE) => {
1525                serde_json::from_value::<MsgEcdsaCertificate>(value).map(Sbp::MsgEcdsaCertificate)
1526            }
1527            Some(MsgCertificateChainDep::MESSAGE_TYPE) => {
1528                serde_json::from_value::<MsgCertificateChainDep>(value)
1529                    .map(Sbp::MsgCertificateChainDep)
1530            }
1531            Some(MsgEcdsaSignatureDepA::MESSAGE_TYPE) => {
1532                serde_json::from_value::<MsgEcdsaSignatureDepA>(value)
1533                    .map(Sbp::MsgEcdsaSignatureDepA)
1534            }
1535            Some(MsgEcdsaSignatureDepB::MESSAGE_TYPE) => {
1536                serde_json::from_value::<MsgEcdsaSignatureDepB>(value)
1537                    .map(Sbp::MsgEcdsaSignatureDepB)
1538            }
1539            Some(MsgEcdsaSignature::MESSAGE_TYPE) => {
1540                serde_json::from_value::<MsgEcdsaSignature>(value).map(Sbp::MsgEcdsaSignature)
1541            }
1542            Some(MsgCertificateChain::MESSAGE_TYPE) => {
1543                serde_json::from_value::<MsgCertificateChain>(value).map(Sbp::MsgCertificateChain)
1544            }
1545            Some(MsgAesCmacSignature::MESSAGE_TYPE) => {
1546                serde_json::from_value::<MsgAesCmacSignature>(value).map(Sbp::MsgAesCmacSignature)
1547            }
1548            Some(MsgFileioConfigReq::MESSAGE_TYPE) => {
1549                serde_json::from_value::<MsgFileioConfigReq>(value).map(Sbp::MsgFileioConfigReq)
1550            }
1551            Some(MsgFileioConfigResp::MESSAGE_TYPE) => {
1552                serde_json::from_value::<MsgFileioConfigResp>(value).map(Sbp::MsgFileioConfigResp)
1553            }
1554            Some(MsgSbasRaw::MESSAGE_TYPE) => {
1555                serde_json::from_value::<MsgSbasRaw>(value).map(Sbp::MsgSbasRaw)
1556            }
1557            Some(MsgLinuxCpuStateDepA::MESSAGE_TYPE) => {
1558                serde_json::from_value::<MsgLinuxCpuStateDepA>(value).map(Sbp::MsgLinuxCpuStateDepA)
1559            }
1560            Some(MsgLinuxMemStateDepA::MESSAGE_TYPE) => {
1561                serde_json::from_value::<MsgLinuxMemStateDepA>(value).map(Sbp::MsgLinuxMemStateDepA)
1562            }
1563            Some(MsgLinuxSysStateDepA::MESSAGE_TYPE) => {
1564                serde_json::from_value::<MsgLinuxSysStateDepA>(value).map(Sbp::MsgLinuxSysStateDepA)
1565            }
1566            Some(MsgLinuxProcessSocketCounts::MESSAGE_TYPE) => {
1567                serde_json::from_value::<MsgLinuxProcessSocketCounts>(value)
1568                    .map(Sbp::MsgLinuxProcessSocketCounts)
1569            }
1570            Some(MsgLinuxProcessSocketQueues::MESSAGE_TYPE) => {
1571                serde_json::from_value::<MsgLinuxProcessSocketQueues>(value)
1572                    .map(Sbp::MsgLinuxProcessSocketQueues)
1573            }
1574            Some(MsgLinuxSocketUsage::MESSAGE_TYPE) => {
1575                serde_json::from_value::<MsgLinuxSocketUsage>(value).map(Sbp::MsgLinuxSocketUsage)
1576            }
1577            Some(MsgLinuxProcessFdCount::MESSAGE_TYPE) => {
1578                serde_json::from_value::<MsgLinuxProcessFdCount>(value)
1579                    .map(Sbp::MsgLinuxProcessFdCount)
1580            }
1581            Some(MsgLinuxProcessFdSummary::MESSAGE_TYPE) => {
1582                serde_json::from_value::<MsgLinuxProcessFdSummary>(value)
1583                    .map(Sbp::MsgLinuxProcessFdSummary)
1584            }
1585            Some(MsgLinuxCpuState::MESSAGE_TYPE) => {
1586                serde_json::from_value::<MsgLinuxCpuState>(value).map(Sbp::MsgLinuxCpuState)
1587            }
1588            Some(MsgLinuxMemState::MESSAGE_TYPE) => {
1589                serde_json::from_value::<MsgLinuxMemState>(value).map(Sbp::MsgLinuxMemState)
1590            }
1591            Some(MsgLinuxSysState::MESSAGE_TYPE) => {
1592                serde_json::from_value::<MsgLinuxSysState>(value).map(Sbp::MsgLinuxSysState)
1593            }
1594            Some(MsgMeasurementPoint::MESSAGE_TYPE) => {
1595                serde_json::from_value::<MsgMeasurementPoint>(value).map(Sbp::MsgMeasurementPoint)
1596            }
1597            Some(MsgProfilingSystemInfo::MESSAGE_TYPE) => {
1598                serde_json::from_value::<MsgProfilingSystemInfo>(value)
1599                    .map(Sbp::MsgProfilingSystemInfo)
1600            }
1601            Some(MsgProfilingThreadInfo::MESSAGE_TYPE) => {
1602                serde_json::from_value::<MsgProfilingThreadInfo>(value)
1603                    .map(Sbp::MsgProfilingThreadInfo)
1604            }
1605            Some(MsgProfilingResourceCounter::MESSAGE_TYPE) => {
1606                serde_json::from_value::<MsgProfilingResourceCounter>(value)
1607                    .map(Sbp::MsgProfilingResourceCounter)
1608            }
1609            Some(MsgStartup::MESSAGE_TYPE) => {
1610                serde_json::from_value::<MsgStartup>(value).map(Sbp::MsgStartup)
1611            }
1612            Some(MsgDgnssStatus::MESSAGE_TYPE) => {
1613                serde_json::from_value::<MsgDgnssStatus>(value).map(Sbp::MsgDgnssStatus)
1614            }
1615            Some(MsgInsStatus::MESSAGE_TYPE) => {
1616                serde_json::from_value::<MsgInsStatus>(value).map(Sbp::MsgInsStatus)
1617            }
1618            Some(MsgCsacTelemetry::MESSAGE_TYPE) => {
1619                serde_json::from_value::<MsgCsacTelemetry>(value).map(Sbp::MsgCsacTelemetry)
1620            }
1621            Some(MsgCsacTelemetryLabels::MESSAGE_TYPE) => {
1622                serde_json::from_value::<MsgCsacTelemetryLabels>(value)
1623                    .map(Sbp::MsgCsacTelemetryLabels)
1624            }
1625            Some(MsgInsUpdates::MESSAGE_TYPE) => {
1626                serde_json::from_value::<MsgInsUpdates>(value).map(Sbp::MsgInsUpdates)
1627            }
1628            Some(MsgGnssTimeOffset::MESSAGE_TYPE) => {
1629                serde_json::from_value::<MsgGnssTimeOffset>(value).map(Sbp::MsgGnssTimeOffset)
1630            }
1631            Some(MsgPpsTime::MESSAGE_TYPE) => {
1632                serde_json::from_value::<MsgPpsTime>(value).map(Sbp::MsgPpsTime)
1633            }
1634            Some(MsgSensorAidEvent::MESSAGE_TYPE) => {
1635                serde_json::from_value::<MsgSensorAidEvent>(value).map(Sbp::MsgSensorAidEvent)
1636            }
1637            Some(MsgGroupMeta::MESSAGE_TYPE) => {
1638                serde_json::from_value::<MsgGroupMeta>(value).map(Sbp::MsgGroupMeta)
1639            }
1640            Some(MsgSolnMeta::MESSAGE_TYPE) => {
1641                serde_json::from_value::<MsgSolnMeta>(value).map(Sbp::MsgSolnMeta)
1642            }
1643            Some(MsgSolnMetaDepA::MESSAGE_TYPE) => {
1644                serde_json::from_value::<MsgSolnMetaDepA>(value).map(Sbp::MsgSolnMetaDepA)
1645            }
1646            Some(MsgStatusJournal::MESSAGE_TYPE) => {
1647                serde_json::from_value::<MsgStatusJournal>(value).map(Sbp::MsgStatusJournal)
1648            }
1649            Some(MsgStatusReport::MESSAGE_TYPE) => {
1650                serde_json::from_value::<MsgStatusReport>(value).map(Sbp::MsgStatusReport)
1651            }
1652            Some(MsgHeartbeat::MESSAGE_TYPE) => {
1653                serde_json::from_value::<MsgHeartbeat>(value).map(Sbp::MsgHeartbeat)
1654            }
1655            msg_id @ Some(_) => serde_json::from_value::<Unknown>(value)
1656                .map(|msg| Unknown { msg_id, ..msg })
1657                .map(Sbp::Unknown),
1658            None => serde_json::from_value::<Invalid>(value)
1659                .map(|msg| Invalid { ..msg })
1660                .map(Sbp::Invalid),
1661        }
1662        .map_err(serde::de::Error::custom)
1663    }
1664}
1665
1666#[derive(Debug, Clone)]
1667pub struct SbpMsgParseError {
1668    /// the message type
1669    pub msg_type: u16,
1670    /// the sender_id
1671    pub sender_id: u16,
1672    /// A vec that just contains the invalid payload bytes
1673    pub invalid_payload: Vec<u8>,
1674}
1675
1676impl From<SbpMsgParseError> for PayloadParseError {
1677    fn from(
1678        SbpMsgParseError {
1679            invalid_payload, ..
1680        }: SbpMsgParseError,
1681    ) -> Self {
1682        Self { invalid_payload }
1683    }
1684}
1685
1686impl std::fmt::Display for SbpMsgParseError {
1687    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1688        write!(f, "error parsing payload")
1689    }
1690}
1691
1692impl std::error::Error for SbpMsgParseError {}
1693
1694impl Sbp {
1695    /// Parse a message from given fields.
1696    ///
1697    /// # Example
1698    ///
1699    /// ```
1700    /// use std::convert::TryInto;
1701    ///
1702    /// use sbp::messages::logging::MsgLog;
1703    /// use sbp::Sbp;
1704    ///
1705    /// fn main() -> Result<(), Box<dyn std::error::Error>> {
1706    ///     // log level 1 and with "hello" as the message
1707    ///     let msg_type = 1025;
1708    ///     let sender_id = 1;
1709    ///     let payload: &[u8] = &[1, 104, 101, 108, 108, 111];
1710    ///
1711    ///     let msg: MsgLog = Sbp::from_parts(msg_type, sender_id, payload)?.try_into()?;
1712    ///     assert_eq!(msg.sender_id, Some(1));
1713    ///     assert_eq!(msg.level, 1);
1714    ///     assert_eq!(msg.text.as_bytes(), "hello".as_bytes());
1715    ///     Ok(())
1716    /// }
1717    /// ```
1718    pub fn from_parts<B: bytes::Buf>(
1719        msg_type: u16,
1720        sender_id: u16,
1721        mut payload: B,
1722    ) -> Result<Sbp, SbpMsgParseError> {
1723        let sbp_msg = match msg_type {
1724            MsgPrintDep::MESSAGE_TYPE => MsgPrintDep::parse(&mut payload).map(Sbp::MsgPrintDep),
1725            MsgTrackingStateDetailedDep::MESSAGE_TYPE => {
1726                MsgTrackingStateDetailedDep::parse(&mut payload)
1727                    .map(Sbp::MsgTrackingStateDetailedDep)
1728            }
1729            MsgTrackingStateDepB::MESSAGE_TYPE => {
1730                MsgTrackingStateDepB::parse(&mut payload).map(Sbp::MsgTrackingStateDepB)
1731            }
1732            MsgAcqResultDepB::MESSAGE_TYPE => {
1733                MsgAcqResultDepB::parse(&mut payload).map(Sbp::MsgAcqResultDepB)
1734            }
1735            MsgAcqResultDepA::MESSAGE_TYPE => {
1736                MsgAcqResultDepA::parse(&mut payload).map(Sbp::MsgAcqResultDepA)
1737            }
1738            MsgTrackingStateDepA::MESSAGE_TYPE => {
1739                MsgTrackingStateDepA::parse(&mut payload).map(Sbp::MsgTrackingStateDepA)
1740            }
1741            MsgThreadState::MESSAGE_TYPE => {
1742                MsgThreadState::parse(&mut payload).map(Sbp::MsgThreadState)
1743            }
1744            MsgUartStateDepa::MESSAGE_TYPE => {
1745                MsgUartStateDepa::parse(&mut payload).map(Sbp::MsgUartStateDepa)
1746            }
1747            MsgIarState::MESSAGE_TYPE => MsgIarState::parse(&mut payload).map(Sbp::MsgIarState),
1748            MsgEphemerisDepA::MESSAGE_TYPE => {
1749                MsgEphemerisDepA::parse(&mut payload).map(Sbp::MsgEphemerisDepA)
1750            }
1751            MsgMaskSatelliteDep::MESSAGE_TYPE => {
1752                MsgMaskSatelliteDep::parse(&mut payload).map(Sbp::MsgMaskSatelliteDep)
1753            }
1754            MsgTrackingIqDepA::MESSAGE_TYPE => {
1755                MsgTrackingIqDepA::parse(&mut payload).map(Sbp::MsgTrackingIqDepA)
1756            }
1757            MsgUartState::MESSAGE_TYPE => MsgUartState::parse(&mut payload).map(Sbp::MsgUartState),
1758            MsgAcqSvProfileDep::MESSAGE_TYPE => {
1759                MsgAcqSvProfileDep::parse(&mut payload).map(Sbp::MsgAcqSvProfileDep)
1760            }
1761            MsgAcqResultDepC::MESSAGE_TYPE => {
1762                MsgAcqResultDepC::parse(&mut payload).map(Sbp::MsgAcqResultDepC)
1763            }
1764            MsgTrackingStateDetailedDepA::MESSAGE_TYPE => {
1765                MsgTrackingStateDetailedDepA::parse(&mut payload)
1766                    .map(Sbp::MsgTrackingStateDetailedDepA)
1767            }
1768            MsgResetFilters::MESSAGE_TYPE => {
1769                MsgResetFilters::parse(&mut payload).map(Sbp::MsgResetFilters)
1770            }
1771            MsgInitBaseDep::MESSAGE_TYPE => {
1772                MsgInitBaseDep::parse(&mut payload).map(Sbp::MsgInitBaseDep)
1773            }
1774            MsgMaskSatellite::MESSAGE_TYPE => {
1775                MsgMaskSatellite::parse(&mut payload).map(Sbp::MsgMaskSatellite)
1776            }
1777            MsgTrackingIqDepB::MESSAGE_TYPE => {
1778                MsgTrackingIqDepB::parse(&mut payload).map(Sbp::MsgTrackingIqDepB)
1779            }
1780            MsgTrackingIq::MESSAGE_TYPE => {
1781                MsgTrackingIq::parse(&mut payload).map(Sbp::MsgTrackingIq)
1782            }
1783            MsgAcqSvProfile::MESSAGE_TYPE => {
1784                MsgAcqSvProfile::parse(&mut payload).map(Sbp::MsgAcqSvProfile)
1785            }
1786            MsgAcqResult::MESSAGE_TYPE => MsgAcqResult::parse(&mut payload).map(Sbp::MsgAcqResult),
1787            MsgTrackingState::MESSAGE_TYPE => {
1788                MsgTrackingState::parse(&mut payload).map(Sbp::MsgTrackingState)
1789            }
1790            MsgObsDepB::MESSAGE_TYPE => MsgObsDepB::parse(&mut payload).map(Sbp::MsgObsDepB),
1791            MsgBasePosLlh::MESSAGE_TYPE => {
1792                MsgBasePosLlh::parse(&mut payload).map(Sbp::MsgBasePosLlh)
1793            }
1794            MsgObsDepA::MESSAGE_TYPE => MsgObsDepA::parse(&mut payload).map(Sbp::MsgObsDepA),
1795            MsgEphemerisDepB::MESSAGE_TYPE => {
1796                MsgEphemerisDepB::parse(&mut payload).map(Sbp::MsgEphemerisDepB)
1797            }
1798            MsgEphemerisDepC::MESSAGE_TYPE => {
1799                MsgEphemerisDepC::parse(&mut payload).map(Sbp::MsgEphemerisDepC)
1800            }
1801            MsgBasePosEcef::MESSAGE_TYPE => {
1802                MsgBasePosEcef::parse(&mut payload).map(Sbp::MsgBasePosEcef)
1803            }
1804            MsgObsDepC::MESSAGE_TYPE => MsgObsDepC::parse(&mut payload).map(Sbp::MsgObsDepC),
1805            MsgObs::MESSAGE_TYPE => MsgObs::parse(&mut payload).map(Sbp::MsgObs),
1806            MsgSpecanDep::MESSAGE_TYPE => MsgSpecanDep::parse(&mut payload).map(Sbp::MsgSpecanDep),
1807            MsgSpecan::MESSAGE_TYPE => MsgSpecan::parse(&mut payload).map(Sbp::MsgSpecan),
1808            MsgMeasurementState::MESSAGE_TYPE => {
1809                MsgMeasurementState::parse(&mut payload).map(Sbp::MsgMeasurementState)
1810            }
1811            MsgSetTime::MESSAGE_TYPE => MsgSetTime::parse(&mut payload).map(Sbp::MsgSetTime),
1812            MsgAlmanac::MESSAGE_TYPE => MsgAlmanac::parse(&mut payload).map(Sbp::MsgAlmanac),
1813            MsgAlmanacGpsDep::MESSAGE_TYPE => {
1814                MsgAlmanacGpsDep::parse(&mut payload).map(Sbp::MsgAlmanacGpsDep)
1815            }
1816            MsgAlmanacGloDep::MESSAGE_TYPE => {
1817                MsgAlmanacGloDep::parse(&mut payload).map(Sbp::MsgAlmanacGloDep)
1818            }
1819            MsgAlmanacGps::MESSAGE_TYPE => {
1820                MsgAlmanacGps::parse(&mut payload).map(Sbp::MsgAlmanacGps)
1821            }
1822            MsgAlmanacGlo::MESSAGE_TYPE => {
1823                MsgAlmanacGlo::parse(&mut payload).map(Sbp::MsgAlmanacGlo)
1824            }
1825            MsgGloBiases::MESSAGE_TYPE => MsgGloBiases::parse(&mut payload).map(Sbp::MsgGloBiases),
1826            MsgEphemerisDepD::MESSAGE_TYPE => {
1827                MsgEphemerisDepD::parse(&mut payload).map(Sbp::MsgEphemerisDepD)
1828            }
1829            MsgEphemerisGpsDepE::MESSAGE_TYPE => {
1830                MsgEphemerisGpsDepE::parse(&mut payload).map(Sbp::MsgEphemerisGpsDepE)
1831            }
1832            MsgEphemerisSbasDepA::MESSAGE_TYPE => {
1833                MsgEphemerisSbasDepA::parse(&mut payload).map(Sbp::MsgEphemerisSbasDepA)
1834            }
1835            MsgEphemerisGloDepA::MESSAGE_TYPE => {
1836                MsgEphemerisGloDepA::parse(&mut payload).map(Sbp::MsgEphemerisGloDepA)
1837            }
1838            MsgEphemerisSbasDepB::MESSAGE_TYPE => {
1839                MsgEphemerisSbasDepB::parse(&mut payload).map(Sbp::MsgEphemerisSbasDepB)
1840            }
1841            MsgEphemerisGloDepB::MESSAGE_TYPE => {
1842                MsgEphemerisGloDepB::parse(&mut payload).map(Sbp::MsgEphemerisGloDepB)
1843            }
1844            MsgEphemerisGpsDepF::MESSAGE_TYPE => {
1845                MsgEphemerisGpsDepF::parse(&mut payload).map(Sbp::MsgEphemerisGpsDepF)
1846            }
1847            MsgEphemerisGloDepC::MESSAGE_TYPE => {
1848                MsgEphemerisGloDepC::parse(&mut payload).map(Sbp::MsgEphemerisGloDepC)
1849            }
1850            MsgEphemerisGloDepD::MESSAGE_TYPE => {
1851                MsgEphemerisGloDepD::parse(&mut payload).map(Sbp::MsgEphemerisGloDepD)
1852            }
1853            MsgEphemerisBds::MESSAGE_TYPE => {
1854                MsgEphemerisBds::parse(&mut payload).map(Sbp::MsgEphemerisBds)
1855            }
1856            MsgEphemerisGps::MESSAGE_TYPE => {
1857                MsgEphemerisGps::parse(&mut payload).map(Sbp::MsgEphemerisGps)
1858            }
1859            MsgEphemerisGlo::MESSAGE_TYPE => {
1860                MsgEphemerisGlo::parse(&mut payload).map(Sbp::MsgEphemerisGlo)
1861            }
1862            MsgEphemerisSbas::MESSAGE_TYPE => {
1863                MsgEphemerisSbas::parse(&mut payload).map(Sbp::MsgEphemerisSbas)
1864            }
1865            MsgEphemerisGal::MESSAGE_TYPE => {
1866                MsgEphemerisGal::parse(&mut payload).map(Sbp::MsgEphemerisGal)
1867            }
1868            MsgEphemerisQzss::MESSAGE_TYPE => {
1869                MsgEphemerisQzss::parse(&mut payload).map(Sbp::MsgEphemerisQzss)
1870            }
1871            MsgIono::MESSAGE_TYPE => MsgIono::parse(&mut payload).map(Sbp::MsgIono),
1872            MsgSvConfigurationGpsDep::MESSAGE_TYPE => {
1873                MsgSvConfigurationGpsDep::parse(&mut payload).map(Sbp::MsgSvConfigurationGpsDep)
1874            }
1875            MsgGroupDelayDepA::MESSAGE_TYPE => {
1876                MsgGroupDelayDepA::parse(&mut payload).map(Sbp::MsgGroupDelayDepA)
1877            }
1878            MsgGroupDelayDepB::MESSAGE_TYPE => {
1879                MsgGroupDelayDepB::parse(&mut payload).map(Sbp::MsgGroupDelayDepB)
1880            }
1881            MsgGroupDelay::MESSAGE_TYPE => {
1882                MsgGroupDelay::parse(&mut payload).map(Sbp::MsgGroupDelay)
1883            }
1884            MsgEphemerisGalDepA::MESSAGE_TYPE => {
1885                MsgEphemerisGalDepA::parse(&mut payload).map(Sbp::MsgEphemerisGalDepA)
1886            }
1887            MsgGnssCapb::MESSAGE_TYPE => MsgGnssCapb::parse(&mut payload).map(Sbp::MsgGnssCapb),
1888            MsgSvAzEl::MESSAGE_TYPE => MsgSvAzEl::parse(&mut payload).map(Sbp::MsgSvAzEl),
1889            MsgSettingsWrite::MESSAGE_TYPE => {
1890                MsgSettingsWrite::parse(&mut payload).map(Sbp::MsgSettingsWrite)
1891            }
1892            MsgSettingsSave::MESSAGE_TYPE => {
1893                MsgSettingsSave::parse(&mut payload).map(Sbp::MsgSettingsSave)
1894            }
1895            MsgSettingsReadByIndexReq::MESSAGE_TYPE => {
1896                MsgSettingsReadByIndexReq::parse(&mut payload).map(Sbp::MsgSettingsReadByIndexReq)
1897            }
1898            MsgFileioReadResp::MESSAGE_TYPE => {
1899                MsgFileioReadResp::parse(&mut payload).map(Sbp::MsgFileioReadResp)
1900            }
1901            MsgSettingsReadReq::MESSAGE_TYPE => {
1902                MsgSettingsReadReq::parse(&mut payload).map(Sbp::MsgSettingsReadReq)
1903            }
1904            MsgSettingsReadResp::MESSAGE_TYPE => {
1905                MsgSettingsReadResp::parse(&mut payload).map(Sbp::MsgSettingsReadResp)
1906            }
1907            MsgSettingsReadByIndexDone::MESSAGE_TYPE => {
1908                MsgSettingsReadByIndexDone::parse(&mut payload).map(Sbp::MsgSettingsReadByIndexDone)
1909            }
1910            MsgSettingsReadByIndexResp::MESSAGE_TYPE => {
1911                MsgSettingsReadByIndexResp::parse(&mut payload).map(Sbp::MsgSettingsReadByIndexResp)
1912            }
1913            MsgFileioReadReq::MESSAGE_TYPE => {
1914                MsgFileioReadReq::parse(&mut payload).map(Sbp::MsgFileioReadReq)
1915            }
1916            MsgFileioReadDirReq::MESSAGE_TYPE => {
1917                MsgFileioReadDirReq::parse(&mut payload).map(Sbp::MsgFileioReadDirReq)
1918            }
1919            MsgFileioReadDirResp::MESSAGE_TYPE => {
1920                MsgFileioReadDirResp::parse(&mut payload).map(Sbp::MsgFileioReadDirResp)
1921            }
1922            MsgFileioWriteResp::MESSAGE_TYPE => {
1923                MsgFileioWriteResp::parse(&mut payload).map(Sbp::MsgFileioWriteResp)
1924            }
1925            MsgFileioRemove::MESSAGE_TYPE => {
1926                MsgFileioRemove::parse(&mut payload).map(Sbp::MsgFileioRemove)
1927            }
1928            MsgFileioWriteReq::MESSAGE_TYPE => {
1929                MsgFileioWriteReq::parse(&mut payload).map(Sbp::MsgFileioWriteReq)
1930            }
1931            MsgSettingsRegister::MESSAGE_TYPE => {
1932                MsgSettingsRegister::parse(&mut payload).map(Sbp::MsgSettingsRegister)
1933            }
1934            MsgSettingsWriteResp::MESSAGE_TYPE => {
1935                MsgSettingsWriteResp::parse(&mut payload).map(Sbp::MsgSettingsWriteResp)
1936            }
1937            MsgBootloaderHandshakeDepA::MESSAGE_TYPE => {
1938                MsgBootloaderHandshakeDepA::parse(&mut payload).map(Sbp::MsgBootloaderHandshakeDepA)
1939            }
1940            MsgBootloaderJumpToApp::MESSAGE_TYPE => {
1941                MsgBootloaderJumpToApp::parse(&mut payload).map(Sbp::MsgBootloaderJumpToApp)
1942            }
1943            MsgResetDep::MESSAGE_TYPE => MsgResetDep::parse(&mut payload).map(Sbp::MsgResetDep),
1944            MsgBootloaderHandshakeReq::MESSAGE_TYPE => {
1945                MsgBootloaderHandshakeReq::parse(&mut payload).map(Sbp::MsgBootloaderHandshakeReq)
1946            }
1947            MsgBootloaderHandshakeResp::MESSAGE_TYPE => {
1948                MsgBootloaderHandshakeResp::parse(&mut payload).map(Sbp::MsgBootloaderHandshakeResp)
1949            }
1950            MsgDeviceMonitor::MESSAGE_TYPE => {
1951                MsgDeviceMonitor::parse(&mut payload).map(Sbp::MsgDeviceMonitor)
1952            }
1953            MsgReset::MESSAGE_TYPE => MsgReset::parse(&mut payload).map(Sbp::MsgReset),
1954            MsgCommandReq::MESSAGE_TYPE => {
1955                MsgCommandReq::parse(&mut payload).map(Sbp::MsgCommandReq)
1956            }
1957            MsgCommandResp::MESSAGE_TYPE => {
1958                MsgCommandResp::parse(&mut payload).map(Sbp::MsgCommandResp)
1959            }
1960            MsgNetworkStateReq::MESSAGE_TYPE => {
1961                MsgNetworkStateReq::parse(&mut payload).map(Sbp::MsgNetworkStateReq)
1962            }
1963            MsgNetworkStateResp::MESSAGE_TYPE => {
1964                MsgNetworkStateResp::parse(&mut payload).map(Sbp::MsgNetworkStateResp)
1965            }
1966            MsgCommandOutput::MESSAGE_TYPE => {
1967                MsgCommandOutput::parse(&mut payload).map(Sbp::MsgCommandOutput)
1968            }
1969            MsgNetworkBandwidthUsage::MESSAGE_TYPE => {
1970                MsgNetworkBandwidthUsage::parse(&mut payload).map(Sbp::MsgNetworkBandwidthUsage)
1971            }
1972            MsgCellModemStatus::MESSAGE_TYPE => {
1973                MsgCellModemStatus::parse(&mut payload).map(Sbp::MsgCellModemStatus)
1974            }
1975            MsgFrontEndGain::MESSAGE_TYPE => {
1976                MsgFrontEndGain::parse(&mut payload).map(Sbp::MsgFrontEndGain)
1977            }
1978            MsgCwResults::MESSAGE_TYPE => MsgCwResults::parse(&mut payload).map(Sbp::MsgCwResults),
1979            MsgCwStart::MESSAGE_TYPE => MsgCwStart::parse(&mut payload).map(Sbp::MsgCwStart),
1980            MsgNapDeviceDnaResp::MESSAGE_TYPE => {
1981                MsgNapDeviceDnaResp::parse(&mut payload).map(Sbp::MsgNapDeviceDnaResp)
1982            }
1983            MsgNapDeviceDnaReq::MESSAGE_TYPE => {
1984                MsgNapDeviceDnaReq::parse(&mut payload).map(Sbp::MsgNapDeviceDnaReq)
1985            }
1986            MsgFlashDone::MESSAGE_TYPE => MsgFlashDone::parse(&mut payload).map(Sbp::MsgFlashDone),
1987            MsgFlashReadResp::MESSAGE_TYPE => {
1988                MsgFlashReadResp::parse(&mut payload).map(Sbp::MsgFlashReadResp)
1989            }
1990            MsgFlashErase::MESSAGE_TYPE => {
1991                MsgFlashErase::parse(&mut payload).map(Sbp::MsgFlashErase)
1992            }
1993            MsgStmFlashLockSector::MESSAGE_TYPE => {
1994                MsgStmFlashLockSector::parse(&mut payload).map(Sbp::MsgStmFlashLockSector)
1995            }
1996            MsgStmFlashUnlockSector::MESSAGE_TYPE => {
1997                MsgStmFlashUnlockSector::parse(&mut payload).map(Sbp::MsgStmFlashUnlockSector)
1998            }
1999            MsgStmUniqueIdResp::MESSAGE_TYPE => {
2000                MsgStmUniqueIdResp::parse(&mut payload).map(Sbp::MsgStmUniqueIdResp)
2001            }
2002            MsgFlashProgram::MESSAGE_TYPE => {
2003                MsgFlashProgram::parse(&mut payload).map(Sbp::MsgFlashProgram)
2004            }
2005            MsgFlashReadReq::MESSAGE_TYPE => {
2006                MsgFlashReadReq::parse(&mut payload).map(Sbp::MsgFlashReadReq)
2007            }
2008            MsgStmUniqueIdReq::MESSAGE_TYPE => {
2009                MsgStmUniqueIdReq::parse(&mut payload).map(Sbp::MsgStmUniqueIdReq)
2010            }
2011            MsgM25FlashWriteStatus::MESSAGE_TYPE => {
2012                MsgM25FlashWriteStatus::parse(&mut payload).map(Sbp::MsgM25FlashWriteStatus)
2013            }
2014            MsgGpsTimeDepA::MESSAGE_TYPE => {
2015                MsgGpsTimeDepA::parse(&mut payload).map(Sbp::MsgGpsTimeDepA)
2016            }
2017            MsgExtEvent::MESSAGE_TYPE => MsgExtEvent::parse(&mut payload).map(Sbp::MsgExtEvent),
2018            MsgGpsTime::MESSAGE_TYPE => MsgGpsTime::parse(&mut payload).map(Sbp::MsgGpsTime),
2019            MsgUtcTime::MESSAGE_TYPE => MsgUtcTime::parse(&mut payload).map(Sbp::MsgUtcTime),
2020            MsgGpsTimeGnss::MESSAGE_TYPE => {
2021                MsgGpsTimeGnss::parse(&mut payload).map(Sbp::MsgGpsTimeGnss)
2022            }
2023            MsgUtcTimeGnss::MESSAGE_TYPE => {
2024                MsgUtcTimeGnss::parse(&mut payload).map(Sbp::MsgUtcTimeGnss)
2025            }
2026            MsgTelSv::MESSAGE_TYPE => MsgTelSv::parse(&mut payload).map(Sbp::MsgTelSv),
2027            MsgSettingsRegisterResp::MESSAGE_TYPE => {
2028                MsgSettingsRegisterResp::parse(&mut payload).map(Sbp::MsgSettingsRegisterResp)
2029            }
2030            MsgPosEcefDepA::MESSAGE_TYPE => {
2031                MsgPosEcefDepA::parse(&mut payload).map(Sbp::MsgPosEcefDepA)
2032            }
2033            MsgPosLlhDepA::MESSAGE_TYPE => {
2034                MsgPosLlhDepA::parse(&mut payload).map(Sbp::MsgPosLlhDepA)
2035            }
2036            MsgBaselineEcefDepA::MESSAGE_TYPE => {
2037                MsgBaselineEcefDepA::parse(&mut payload).map(Sbp::MsgBaselineEcefDepA)
2038            }
2039            MsgBaselineNedDepA::MESSAGE_TYPE => {
2040                MsgBaselineNedDepA::parse(&mut payload).map(Sbp::MsgBaselineNedDepA)
2041            }
2042            MsgVelEcefDepA::MESSAGE_TYPE => {
2043                MsgVelEcefDepA::parse(&mut payload).map(Sbp::MsgVelEcefDepA)
2044            }
2045            MsgVelNedDepA::MESSAGE_TYPE => {
2046                MsgVelNedDepA::parse(&mut payload).map(Sbp::MsgVelNedDepA)
2047            }
2048            MsgDopsDepA::MESSAGE_TYPE => MsgDopsDepA::parse(&mut payload).map(Sbp::MsgDopsDepA),
2049            MsgBaselineHeadingDepA::MESSAGE_TYPE => {
2050                MsgBaselineHeadingDepA::parse(&mut payload).map(Sbp::MsgBaselineHeadingDepA)
2051            }
2052            MsgDops::MESSAGE_TYPE => MsgDops::parse(&mut payload).map(Sbp::MsgDops),
2053            MsgPosEcef::MESSAGE_TYPE => MsgPosEcef::parse(&mut payload).map(Sbp::MsgPosEcef),
2054            MsgPosLlh::MESSAGE_TYPE => MsgPosLlh::parse(&mut payload).map(Sbp::MsgPosLlh),
2055            MsgBaselineEcef::MESSAGE_TYPE => {
2056                MsgBaselineEcef::parse(&mut payload).map(Sbp::MsgBaselineEcef)
2057            }
2058            MsgBaselineNed::MESSAGE_TYPE => {
2059                MsgBaselineNed::parse(&mut payload).map(Sbp::MsgBaselineNed)
2060            }
2061            MsgVelEcef::MESSAGE_TYPE => MsgVelEcef::parse(&mut payload).map(Sbp::MsgVelEcef),
2062            MsgVelNed::MESSAGE_TYPE => MsgVelNed::parse(&mut payload).map(Sbp::MsgVelNed),
2063            MsgBaselineHeading::MESSAGE_TYPE => {
2064                MsgBaselineHeading::parse(&mut payload).map(Sbp::MsgBaselineHeading)
2065            }
2066            MsgAgeCorrections::MESSAGE_TYPE => {
2067                MsgAgeCorrections::parse(&mut payload).map(Sbp::MsgAgeCorrections)
2068            }
2069            MsgPosLlhCov::MESSAGE_TYPE => MsgPosLlhCov::parse(&mut payload).map(Sbp::MsgPosLlhCov),
2070            MsgVelNedCov::MESSAGE_TYPE => MsgVelNedCov::parse(&mut payload).map(Sbp::MsgVelNedCov),
2071            MsgVelBody::MESSAGE_TYPE => MsgVelBody::parse(&mut payload).map(Sbp::MsgVelBody),
2072            MsgPosEcefCov::MESSAGE_TYPE => {
2073                MsgPosEcefCov::parse(&mut payload).map(Sbp::MsgPosEcefCov)
2074            }
2075            MsgVelEcefCov::MESSAGE_TYPE => {
2076                MsgVelEcefCov::parse(&mut payload).map(Sbp::MsgVelEcefCov)
2077            }
2078            MsgProtectionLevelDepA::MESSAGE_TYPE => {
2079                MsgProtectionLevelDepA::parse(&mut payload).map(Sbp::MsgProtectionLevelDepA)
2080            }
2081            MsgProtectionLevel::MESSAGE_TYPE => {
2082                MsgProtectionLevel::parse(&mut payload).map(Sbp::MsgProtectionLevel)
2083            }
2084            MsgPosLlhAcc::MESSAGE_TYPE => MsgPosLlhAcc::parse(&mut payload).map(Sbp::MsgPosLlhAcc),
2085            MsgVelCog::MESSAGE_TYPE => MsgVelCog::parse(&mut payload).map(Sbp::MsgVelCog),
2086            MsgOrientQuat::MESSAGE_TYPE => {
2087                MsgOrientQuat::parse(&mut payload).map(Sbp::MsgOrientQuat)
2088            }
2089            MsgOrientEuler::MESSAGE_TYPE => {
2090                MsgOrientEuler::parse(&mut payload).map(Sbp::MsgOrientEuler)
2091            }
2092            MsgAngularRate::MESSAGE_TYPE => {
2093                MsgAngularRate::parse(&mut payload).map(Sbp::MsgAngularRate)
2094            }
2095            MsgPosEcefGnss::MESSAGE_TYPE => {
2096                MsgPosEcefGnss::parse(&mut payload).map(Sbp::MsgPosEcefGnss)
2097            }
2098            MsgPosLlhGnss::MESSAGE_TYPE => {
2099                MsgPosLlhGnss::parse(&mut payload).map(Sbp::MsgPosLlhGnss)
2100            }
2101            MsgVelEcefGnss::MESSAGE_TYPE => {
2102                MsgVelEcefGnss::parse(&mut payload).map(Sbp::MsgVelEcefGnss)
2103            }
2104            MsgVelNedGnss::MESSAGE_TYPE => {
2105                MsgVelNedGnss::parse(&mut payload).map(Sbp::MsgVelNedGnss)
2106            }
2107            MsgPosLlhCovGnss::MESSAGE_TYPE => {
2108                MsgPosLlhCovGnss::parse(&mut payload).map(Sbp::MsgPosLlhCovGnss)
2109            }
2110            MsgVelNedCovGnss::MESSAGE_TYPE => {
2111                MsgVelNedCovGnss::parse(&mut payload).map(Sbp::MsgVelNedCovGnss)
2112            }
2113            MsgPosEcefCovGnss::MESSAGE_TYPE => {
2114                MsgPosEcefCovGnss::parse(&mut payload).map(Sbp::MsgPosEcefCovGnss)
2115            }
2116            MsgVelEcefCovGnss::MESSAGE_TYPE => {
2117                MsgVelEcefCovGnss::parse(&mut payload).map(Sbp::MsgVelEcefCovGnss)
2118            }
2119            MsgUtcLeapSecond::MESSAGE_TYPE => {
2120                MsgUtcLeapSecond::parse(&mut payload).map(Sbp::MsgUtcLeapSecond)
2121            }
2122            MsgReferenceFrameParam::MESSAGE_TYPE => {
2123                MsgReferenceFrameParam::parse(&mut payload).map(Sbp::MsgReferenceFrameParam)
2124            }
2125            MsgPoseRelative::MESSAGE_TYPE => {
2126                MsgPoseRelative::parse(&mut payload).map(Sbp::MsgPoseRelative)
2127            }
2128            MsgNdbEvent::MESSAGE_TYPE => MsgNdbEvent::parse(&mut payload).map(Sbp::MsgNdbEvent),
2129            MsgLog::MESSAGE_TYPE => MsgLog::parse(&mut payload).map(Sbp::MsgLog),
2130            MsgFwd::MESSAGE_TYPE => MsgFwd::parse(&mut payload).map(Sbp::MsgFwd),
2131            MsgSsrOrbitClockDepA::MESSAGE_TYPE => {
2132                MsgSsrOrbitClockDepA::parse(&mut payload).map(Sbp::MsgSsrOrbitClockDepA)
2133            }
2134            MsgSsrOrbitClock::MESSAGE_TYPE => {
2135                MsgSsrOrbitClock::parse(&mut payload).map(Sbp::MsgSsrOrbitClock)
2136            }
2137            MsgSsrOrbitClockBounds::MESSAGE_TYPE => {
2138                MsgSsrOrbitClockBounds::parse(&mut payload).map(Sbp::MsgSsrOrbitClockBounds)
2139            }
2140            MsgSsrOrbitClockBoundsDegradation::MESSAGE_TYPE => {
2141                MsgSsrOrbitClockBoundsDegradation::parse(&mut payload)
2142                    .map(Sbp::MsgSsrOrbitClockBoundsDegradation)
2143            }
2144            MsgSsrCodeBiases::MESSAGE_TYPE => {
2145                MsgSsrCodeBiases::parse(&mut payload).map(Sbp::MsgSsrCodeBiases)
2146            }
2147            MsgSsrPhaseBiases::MESSAGE_TYPE => {
2148                MsgSsrPhaseBiases::parse(&mut payload).map(Sbp::MsgSsrPhaseBiases)
2149            }
2150            MsgSsrStecCorrectionDepA::MESSAGE_TYPE => {
2151                MsgSsrStecCorrectionDepA::parse(&mut payload).map(Sbp::MsgSsrStecCorrectionDepA)
2152            }
2153            MsgSsrCodePhaseBiasesBounds::MESSAGE_TYPE => {
2154                MsgSsrCodePhaseBiasesBounds::parse(&mut payload)
2155                    .map(Sbp::MsgSsrCodePhaseBiasesBounds)
2156            }
2157            MsgSsrGriddedCorrectionNoStdDepA::MESSAGE_TYPE => {
2158                MsgSsrGriddedCorrectionNoStdDepA::parse(&mut payload)
2159                    .map(Sbp::MsgSsrGriddedCorrectionNoStdDepA)
2160            }
2161            MsgSsrGridDefinitionDepA::MESSAGE_TYPE => {
2162                MsgSsrGridDefinitionDepA::parse(&mut payload).map(Sbp::MsgSsrGridDefinitionDepA)
2163            }
2164            MsgSsrTileDefinitionDepA::MESSAGE_TYPE => {
2165                MsgSsrTileDefinitionDepA::parse(&mut payload).map(Sbp::MsgSsrTileDefinitionDepA)
2166            }
2167            MsgSsrTileDefinitionDepB::MESSAGE_TYPE => {
2168                MsgSsrTileDefinitionDepB::parse(&mut payload).map(Sbp::MsgSsrTileDefinitionDepB)
2169            }
2170            MsgSsrTileDefinition::MESSAGE_TYPE => {
2171                MsgSsrTileDefinition::parse(&mut payload).map(Sbp::MsgSsrTileDefinition)
2172            }
2173            MsgSsrGriddedCorrectionDepA::MESSAGE_TYPE => {
2174                MsgSsrGriddedCorrectionDepA::parse(&mut payload)
2175                    .map(Sbp::MsgSsrGriddedCorrectionDepA)
2176            }
2177            MsgSsrStecCorrectionDep::MESSAGE_TYPE => {
2178                MsgSsrStecCorrectionDep::parse(&mut payload).map(Sbp::MsgSsrStecCorrectionDep)
2179            }
2180            MsgSsrGriddedCorrection::MESSAGE_TYPE => {
2181                MsgSsrGriddedCorrection::parse(&mut payload).map(Sbp::MsgSsrGriddedCorrection)
2182            }
2183            MsgSsrStecCorrection::MESSAGE_TYPE => {
2184                MsgSsrStecCorrection::parse(&mut payload).map(Sbp::MsgSsrStecCorrection)
2185            }
2186            MsgSsrGriddedCorrectionBounds::MESSAGE_TYPE => {
2187                MsgSsrGriddedCorrectionBounds::parse(&mut payload)
2188                    .map(Sbp::MsgSsrGriddedCorrectionBounds)
2189            }
2190            MsgSsrSatelliteApcDep::MESSAGE_TYPE => {
2191                MsgSsrSatelliteApcDep::parse(&mut payload).map(Sbp::MsgSsrSatelliteApcDep)
2192            }
2193            MsgSsrSatelliteApc::MESSAGE_TYPE => {
2194                MsgSsrSatelliteApc::parse(&mut payload).map(Sbp::MsgSsrSatelliteApc)
2195            }
2196            MsgOsr::MESSAGE_TYPE => MsgOsr::parse(&mut payload).map(Sbp::MsgOsr),
2197            MsgUserData::MESSAGE_TYPE => MsgUserData::parse(&mut payload).map(Sbp::MsgUserData),
2198            MsgImuRaw::MESSAGE_TYPE => MsgImuRaw::parse(&mut payload).map(Sbp::MsgImuRaw),
2199            MsgImuAux::MESSAGE_TYPE => MsgImuAux::parse(&mut payload).map(Sbp::MsgImuAux),
2200            MsgMagRaw::MESSAGE_TYPE => MsgMagRaw::parse(&mut payload).map(Sbp::MsgMagRaw),
2201            MsgOdometry::MESSAGE_TYPE => MsgOdometry::parse(&mut payload).map(Sbp::MsgOdometry),
2202            MsgWheeltick::MESSAGE_TYPE => MsgWheeltick::parse(&mut payload).map(Sbp::MsgWheeltick),
2203            MsgImuComp::MESSAGE_TYPE => MsgImuComp::parse(&mut payload).map(Sbp::MsgImuComp),
2204            MsgSsrFlagHighLevelDepA::MESSAGE_TYPE => {
2205                MsgSsrFlagHighLevelDepA::parse(&mut payload).map(Sbp::MsgSsrFlagHighLevelDepA)
2206            }
2207            MsgSsrFlagHighLevel::MESSAGE_TYPE => {
2208                MsgSsrFlagHighLevel::parse(&mut payload).map(Sbp::MsgSsrFlagHighLevel)
2209            }
2210            MsgSsrFlagSatellites::MESSAGE_TYPE => {
2211                MsgSsrFlagSatellites::parse(&mut payload).map(Sbp::MsgSsrFlagSatellites)
2212            }
2213            MsgSsrFlagTropoGridPoints::MESSAGE_TYPE => {
2214                MsgSsrFlagTropoGridPoints::parse(&mut payload).map(Sbp::MsgSsrFlagTropoGridPoints)
2215            }
2216            MsgSsrFlagIonoGridPoints::MESSAGE_TYPE => {
2217                MsgSsrFlagIonoGridPoints::parse(&mut payload).map(Sbp::MsgSsrFlagIonoGridPoints)
2218            }
2219            MsgSsrFlagIonoTileSatLos::MESSAGE_TYPE => {
2220                MsgSsrFlagIonoTileSatLos::parse(&mut payload).map(Sbp::MsgSsrFlagIonoTileSatLos)
2221            }
2222            MsgSsrFlagIonoGridPointSatLos::MESSAGE_TYPE => {
2223                MsgSsrFlagIonoGridPointSatLos::parse(&mut payload)
2224                    .map(Sbp::MsgSsrFlagIonoGridPointSatLos)
2225            }
2226            MsgAcknowledge::MESSAGE_TYPE => {
2227                MsgAcknowledge::parse(&mut payload).map(Sbp::MsgAcknowledge)
2228            }
2229            MsgEd25519SignatureDepA::MESSAGE_TYPE => {
2230                MsgEd25519SignatureDepA::parse(&mut payload).map(Sbp::MsgEd25519SignatureDepA)
2231            }
2232            MsgEd25519CertificateDep::MESSAGE_TYPE => {
2233                MsgEd25519CertificateDep::parse(&mut payload).map(Sbp::MsgEd25519CertificateDep)
2234            }
2235            MsgEd25519SignatureDepB::MESSAGE_TYPE => {
2236                MsgEd25519SignatureDepB::parse(&mut payload).map(Sbp::MsgEd25519SignatureDepB)
2237            }
2238            MsgEcdsaCertificate::MESSAGE_TYPE => {
2239                MsgEcdsaCertificate::parse(&mut payload).map(Sbp::MsgEcdsaCertificate)
2240            }
2241            MsgCertificateChainDep::MESSAGE_TYPE => {
2242                MsgCertificateChainDep::parse(&mut payload).map(Sbp::MsgCertificateChainDep)
2243            }
2244            MsgEcdsaSignatureDepA::MESSAGE_TYPE => {
2245                MsgEcdsaSignatureDepA::parse(&mut payload).map(Sbp::MsgEcdsaSignatureDepA)
2246            }
2247            MsgEcdsaSignatureDepB::MESSAGE_TYPE => {
2248                MsgEcdsaSignatureDepB::parse(&mut payload).map(Sbp::MsgEcdsaSignatureDepB)
2249            }
2250            MsgEcdsaSignature::MESSAGE_TYPE => {
2251                MsgEcdsaSignature::parse(&mut payload).map(Sbp::MsgEcdsaSignature)
2252            }
2253            MsgCertificateChain::MESSAGE_TYPE => {
2254                MsgCertificateChain::parse(&mut payload).map(Sbp::MsgCertificateChain)
2255            }
2256            MsgAesCmacSignature::MESSAGE_TYPE => {
2257                MsgAesCmacSignature::parse(&mut payload).map(Sbp::MsgAesCmacSignature)
2258            }
2259            MsgFileioConfigReq::MESSAGE_TYPE => {
2260                MsgFileioConfigReq::parse(&mut payload).map(Sbp::MsgFileioConfigReq)
2261            }
2262            MsgFileioConfigResp::MESSAGE_TYPE => {
2263                MsgFileioConfigResp::parse(&mut payload).map(Sbp::MsgFileioConfigResp)
2264            }
2265            MsgSbasRaw::MESSAGE_TYPE => MsgSbasRaw::parse(&mut payload).map(Sbp::MsgSbasRaw),
2266            MsgLinuxCpuStateDepA::MESSAGE_TYPE => {
2267                MsgLinuxCpuStateDepA::parse(&mut payload).map(Sbp::MsgLinuxCpuStateDepA)
2268            }
2269            MsgLinuxMemStateDepA::MESSAGE_TYPE => {
2270                MsgLinuxMemStateDepA::parse(&mut payload).map(Sbp::MsgLinuxMemStateDepA)
2271            }
2272            MsgLinuxSysStateDepA::MESSAGE_TYPE => {
2273                MsgLinuxSysStateDepA::parse(&mut payload).map(Sbp::MsgLinuxSysStateDepA)
2274            }
2275            MsgLinuxProcessSocketCounts::MESSAGE_TYPE => {
2276                MsgLinuxProcessSocketCounts::parse(&mut payload)
2277                    .map(Sbp::MsgLinuxProcessSocketCounts)
2278            }
2279            MsgLinuxProcessSocketQueues::MESSAGE_TYPE => {
2280                MsgLinuxProcessSocketQueues::parse(&mut payload)
2281                    .map(Sbp::MsgLinuxProcessSocketQueues)
2282            }
2283            MsgLinuxSocketUsage::MESSAGE_TYPE => {
2284                MsgLinuxSocketUsage::parse(&mut payload).map(Sbp::MsgLinuxSocketUsage)
2285            }
2286            MsgLinuxProcessFdCount::MESSAGE_TYPE => {
2287                MsgLinuxProcessFdCount::parse(&mut payload).map(Sbp::MsgLinuxProcessFdCount)
2288            }
2289            MsgLinuxProcessFdSummary::MESSAGE_TYPE => {
2290                MsgLinuxProcessFdSummary::parse(&mut payload).map(Sbp::MsgLinuxProcessFdSummary)
2291            }
2292            MsgLinuxCpuState::MESSAGE_TYPE => {
2293                MsgLinuxCpuState::parse(&mut payload).map(Sbp::MsgLinuxCpuState)
2294            }
2295            MsgLinuxMemState::MESSAGE_TYPE => {
2296                MsgLinuxMemState::parse(&mut payload).map(Sbp::MsgLinuxMemState)
2297            }
2298            MsgLinuxSysState::MESSAGE_TYPE => {
2299                MsgLinuxSysState::parse(&mut payload).map(Sbp::MsgLinuxSysState)
2300            }
2301            MsgMeasurementPoint::MESSAGE_TYPE => {
2302                MsgMeasurementPoint::parse(&mut payload).map(Sbp::MsgMeasurementPoint)
2303            }
2304            MsgProfilingSystemInfo::MESSAGE_TYPE => {
2305                MsgProfilingSystemInfo::parse(&mut payload).map(Sbp::MsgProfilingSystemInfo)
2306            }
2307            MsgProfilingThreadInfo::MESSAGE_TYPE => {
2308                MsgProfilingThreadInfo::parse(&mut payload).map(Sbp::MsgProfilingThreadInfo)
2309            }
2310            MsgProfilingResourceCounter::MESSAGE_TYPE => {
2311                MsgProfilingResourceCounter::parse(&mut payload)
2312                    .map(Sbp::MsgProfilingResourceCounter)
2313            }
2314            MsgStartup::MESSAGE_TYPE => MsgStartup::parse(&mut payload).map(Sbp::MsgStartup),
2315            MsgDgnssStatus::MESSAGE_TYPE => {
2316                MsgDgnssStatus::parse(&mut payload).map(Sbp::MsgDgnssStatus)
2317            }
2318            MsgInsStatus::MESSAGE_TYPE => MsgInsStatus::parse(&mut payload).map(Sbp::MsgInsStatus),
2319            MsgCsacTelemetry::MESSAGE_TYPE => {
2320                MsgCsacTelemetry::parse(&mut payload).map(Sbp::MsgCsacTelemetry)
2321            }
2322            MsgCsacTelemetryLabels::MESSAGE_TYPE => {
2323                MsgCsacTelemetryLabels::parse(&mut payload).map(Sbp::MsgCsacTelemetryLabels)
2324            }
2325            MsgInsUpdates::MESSAGE_TYPE => {
2326                MsgInsUpdates::parse(&mut payload).map(Sbp::MsgInsUpdates)
2327            }
2328            MsgGnssTimeOffset::MESSAGE_TYPE => {
2329                MsgGnssTimeOffset::parse(&mut payload).map(Sbp::MsgGnssTimeOffset)
2330            }
2331            MsgPpsTime::MESSAGE_TYPE => MsgPpsTime::parse(&mut payload).map(Sbp::MsgPpsTime),
2332            MsgSensorAidEvent::MESSAGE_TYPE => {
2333                MsgSensorAidEvent::parse(&mut payload).map(Sbp::MsgSensorAidEvent)
2334            }
2335            MsgGroupMeta::MESSAGE_TYPE => MsgGroupMeta::parse(&mut payload).map(Sbp::MsgGroupMeta),
2336            MsgSolnMeta::MESSAGE_TYPE => MsgSolnMeta::parse(&mut payload).map(Sbp::MsgSolnMeta),
2337            MsgSolnMetaDepA::MESSAGE_TYPE => {
2338                MsgSolnMetaDepA::parse(&mut payload).map(Sbp::MsgSolnMetaDepA)
2339            }
2340            MsgStatusJournal::MESSAGE_TYPE => {
2341                MsgStatusJournal::parse(&mut payload).map(Sbp::MsgStatusJournal)
2342            }
2343            MsgStatusReport::MESSAGE_TYPE => {
2344                MsgStatusReport::parse(&mut payload).map(Sbp::MsgStatusReport)
2345            }
2346            MsgHeartbeat::MESSAGE_TYPE => MsgHeartbeat::parse(&mut payload).map(Sbp::MsgHeartbeat),
2347            msg_type => {
2348                Unknown::parse(&mut payload)
2349                    // keep the msg ID we originally saw
2350                    .map(|msg| Unknown {
2351                        msg_id: Some(msg_type),
2352                        ..msg
2353                    })
2354                    .map(Sbp::Unknown)
2355            }
2356        };
2357        // Inject sender_id, handle error
2358        match sbp_msg {
2359            Ok(mut msg) => {
2360                msg.set_sender_id(sender_id);
2361                Ok(msg)
2362            }
2363            Err(PayloadParseError { invalid_payload }) => Err(SbpMsgParseError {
2364                msg_type,
2365                sender_id,
2366                invalid_payload,
2367            }),
2368        }
2369    }
2370}
2371
2372impl SbpMessage for Sbp {
2373    fn message_name(&self) -> &'static str {
2374        match self {
2375            Sbp::MsgPrintDep(msg) => msg.message_name(),
2376            Sbp::MsgTrackingStateDetailedDep(msg) => msg.message_name(),
2377            Sbp::MsgTrackingStateDepB(msg) => msg.message_name(),
2378            Sbp::MsgAcqResultDepB(msg) => msg.message_name(),
2379            Sbp::MsgAcqResultDepA(msg) => msg.message_name(),
2380            Sbp::MsgTrackingStateDepA(msg) => msg.message_name(),
2381            Sbp::MsgThreadState(msg) => msg.message_name(),
2382            Sbp::MsgUartStateDepa(msg) => msg.message_name(),
2383            Sbp::MsgIarState(msg) => msg.message_name(),
2384            Sbp::MsgEphemerisDepA(msg) => msg.message_name(),
2385            Sbp::MsgMaskSatelliteDep(msg) => msg.message_name(),
2386            Sbp::MsgTrackingIqDepA(msg) => msg.message_name(),
2387            Sbp::MsgUartState(msg) => msg.message_name(),
2388            Sbp::MsgAcqSvProfileDep(msg) => msg.message_name(),
2389            Sbp::MsgAcqResultDepC(msg) => msg.message_name(),
2390            Sbp::MsgTrackingStateDetailedDepA(msg) => msg.message_name(),
2391            Sbp::MsgResetFilters(msg) => msg.message_name(),
2392            Sbp::MsgInitBaseDep(msg) => msg.message_name(),
2393            Sbp::MsgMaskSatellite(msg) => msg.message_name(),
2394            Sbp::MsgTrackingIqDepB(msg) => msg.message_name(),
2395            Sbp::MsgTrackingIq(msg) => msg.message_name(),
2396            Sbp::MsgAcqSvProfile(msg) => msg.message_name(),
2397            Sbp::MsgAcqResult(msg) => msg.message_name(),
2398            Sbp::MsgTrackingState(msg) => msg.message_name(),
2399            Sbp::MsgObsDepB(msg) => msg.message_name(),
2400            Sbp::MsgBasePosLlh(msg) => msg.message_name(),
2401            Sbp::MsgObsDepA(msg) => msg.message_name(),
2402            Sbp::MsgEphemerisDepB(msg) => msg.message_name(),
2403            Sbp::MsgEphemerisDepC(msg) => msg.message_name(),
2404            Sbp::MsgBasePosEcef(msg) => msg.message_name(),
2405            Sbp::MsgObsDepC(msg) => msg.message_name(),
2406            Sbp::MsgObs(msg) => msg.message_name(),
2407            Sbp::MsgSpecanDep(msg) => msg.message_name(),
2408            Sbp::MsgSpecan(msg) => msg.message_name(),
2409            Sbp::MsgMeasurementState(msg) => msg.message_name(),
2410            Sbp::MsgSetTime(msg) => msg.message_name(),
2411            Sbp::MsgAlmanac(msg) => msg.message_name(),
2412            Sbp::MsgAlmanacGpsDep(msg) => msg.message_name(),
2413            Sbp::MsgAlmanacGloDep(msg) => msg.message_name(),
2414            Sbp::MsgAlmanacGps(msg) => msg.message_name(),
2415            Sbp::MsgAlmanacGlo(msg) => msg.message_name(),
2416            Sbp::MsgGloBiases(msg) => msg.message_name(),
2417            Sbp::MsgEphemerisDepD(msg) => msg.message_name(),
2418            Sbp::MsgEphemerisGpsDepE(msg) => msg.message_name(),
2419            Sbp::MsgEphemerisSbasDepA(msg) => msg.message_name(),
2420            Sbp::MsgEphemerisGloDepA(msg) => msg.message_name(),
2421            Sbp::MsgEphemerisSbasDepB(msg) => msg.message_name(),
2422            Sbp::MsgEphemerisGloDepB(msg) => msg.message_name(),
2423            Sbp::MsgEphemerisGpsDepF(msg) => msg.message_name(),
2424            Sbp::MsgEphemerisGloDepC(msg) => msg.message_name(),
2425            Sbp::MsgEphemerisGloDepD(msg) => msg.message_name(),
2426            Sbp::MsgEphemerisBds(msg) => msg.message_name(),
2427            Sbp::MsgEphemerisGps(msg) => msg.message_name(),
2428            Sbp::MsgEphemerisGlo(msg) => msg.message_name(),
2429            Sbp::MsgEphemerisSbas(msg) => msg.message_name(),
2430            Sbp::MsgEphemerisGal(msg) => msg.message_name(),
2431            Sbp::MsgEphemerisQzss(msg) => msg.message_name(),
2432            Sbp::MsgIono(msg) => msg.message_name(),
2433            Sbp::MsgSvConfigurationGpsDep(msg) => msg.message_name(),
2434            Sbp::MsgGroupDelayDepA(msg) => msg.message_name(),
2435            Sbp::MsgGroupDelayDepB(msg) => msg.message_name(),
2436            Sbp::MsgGroupDelay(msg) => msg.message_name(),
2437            Sbp::MsgEphemerisGalDepA(msg) => msg.message_name(),
2438            Sbp::MsgGnssCapb(msg) => msg.message_name(),
2439            Sbp::MsgSvAzEl(msg) => msg.message_name(),
2440            Sbp::MsgSettingsWrite(msg) => msg.message_name(),
2441            Sbp::MsgSettingsSave(msg) => msg.message_name(),
2442            Sbp::MsgSettingsReadByIndexReq(msg) => msg.message_name(),
2443            Sbp::MsgFileioReadResp(msg) => msg.message_name(),
2444            Sbp::MsgSettingsReadReq(msg) => msg.message_name(),
2445            Sbp::MsgSettingsReadResp(msg) => msg.message_name(),
2446            Sbp::MsgSettingsReadByIndexDone(msg) => msg.message_name(),
2447            Sbp::MsgSettingsReadByIndexResp(msg) => msg.message_name(),
2448            Sbp::MsgFileioReadReq(msg) => msg.message_name(),
2449            Sbp::MsgFileioReadDirReq(msg) => msg.message_name(),
2450            Sbp::MsgFileioReadDirResp(msg) => msg.message_name(),
2451            Sbp::MsgFileioWriteResp(msg) => msg.message_name(),
2452            Sbp::MsgFileioRemove(msg) => msg.message_name(),
2453            Sbp::MsgFileioWriteReq(msg) => msg.message_name(),
2454            Sbp::MsgSettingsRegister(msg) => msg.message_name(),
2455            Sbp::MsgSettingsWriteResp(msg) => msg.message_name(),
2456            Sbp::MsgBootloaderHandshakeDepA(msg) => msg.message_name(),
2457            Sbp::MsgBootloaderJumpToApp(msg) => msg.message_name(),
2458            Sbp::MsgResetDep(msg) => msg.message_name(),
2459            Sbp::MsgBootloaderHandshakeReq(msg) => msg.message_name(),
2460            Sbp::MsgBootloaderHandshakeResp(msg) => msg.message_name(),
2461            Sbp::MsgDeviceMonitor(msg) => msg.message_name(),
2462            Sbp::MsgReset(msg) => msg.message_name(),
2463            Sbp::MsgCommandReq(msg) => msg.message_name(),
2464            Sbp::MsgCommandResp(msg) => msg.message_name(),
2465            Sbp::MsgNetworkStateReq(msg) => msg.message_name(),
2466            Sbp::MsgNetworkStateResp(msg) => msg.message_name(),
2467            Sbp::MsgCommandOutput(msg) => msg.message_name(),
2468            Sbp::MsgNetworkBandwidthUsage(msg) => msg.message_name(),
2469            Sbp::MsgCellModemStatus(msg) => msg.message_name(),
2470            Sbp::MsgFrontEndGain(msg) => msg.message_name(),
2471            Sbp::MsgCwResults(msg) => msg.message_name(),
2472            Sbp::MsgCwStart(msg) => msg.message_name(),
2473            Sbp::MsgNapDeviceDnaResp(msg) => msg.message_name(),
2474            Sbp::MsgNapDeviceDnaReq(msg) => msg.message_name(),
2475            Sbp::MsgFlashDone(msg) => msg.message_name(),
2476            Sbp::MsgFlashReadResp(msg) => msg.message_name(),
2477            Sbp::MsgFlashErase(msg) => msg.message_name(),
2478            Sbp::MsgStmFlashLockSector(msg) => msg.message_name(),
2479            Sbp::MsgStmFlashUnlockSector(msg) => msg.message_name(),
2480            Sbp::MsgStmUniqueIdResp(msg) => msg.message_name(),
2481            Sbp::MsgFlashProgram(msg) => msg.message_name(),
2482            Sbp::MsgFlashReadReq(msg) => msg.message_name(),
2483            Sbp::MsgStmUniqueIdReq(msg) => msg.message_name(),
2484            Sbp::MsgM25FlashWriteStatus(msg) => msg.message_name(),
2485            Sbp::MsgGpsTimeDepA(msg) => msg.message_name(),
2486            Sbp::MsgExtEvent(msg) => msg.message_name(),
2487            Sbp::MsgGpsTime(msg) => msg.message_name(),
2488            Sbp::MsgUtcTime(msg) => msg.message_name(),
2489            Sbp::MsgGpsTimeGnss(msg) => msg.message_name(),
2490            Sbp::MsgUtcTimeGnss(msg) => msg.message_name(),
2491            Sbp::MsgTelSv(msg) => msg.message_name(),
2492            Sbp::MsgSettingsRegisterResp(msg) => msg.message_name(),
2493            Sbp::MsgPosEcefDepA(msg) => msg.message_name(),
2494            Sbp::MsgPosLlhDepA(msg) => msg.message_name(),
2495            Sbp::MsgBaselineEcefDepA(msg) => msg.message_name(),
2496            Sbp::MsgBaselineNedDepA(msg) => msg.message_name(),
2497            Sbp::MsgVelEcefDepA(msg) => msg.message_name(),
2498            Sbp::MsgVelNedDepA(msg) => msg.message_name(),
2499            Sbp::MsgDopsDepA(msg) => msg.message_name(),
2500            Sbp::MsgBaselineHeadingDepA(msg) => msg.message_name(),
2501            Sbp::MsgDops(msg) => msg.message_name(),
2502            Sbp::MsgPosEcef(msg) => msg.message_name(),
2503            Sbp::MsgPosLlh(msg) => msg.message_name(),
2504            Sbp::MsgBaselineEcef(msg) => msg.message_name(),
2505            Sbp::MsgBaselineNed(msg) => msg.message_name(),
2506            Sbp::MsgVelEcef(msg) => msg.message_name(),
2507            Sbp::MsgVelNed(msg) => msg.message_name(),
2508            Sbp::MsgBaselineHeading(msg) => msg.message_name(),
2509            Sbp::MsgAgeCorrections(msg) => msg.message_name(),
2510            Sbp::MsgPosLlhCov(msg) => msg.message_name(),
2511            Sbp::MsgVelNedCov(msg) => msg.message_name(),
2512            Sbp::MsgVelBody(msg) => msg.message_name(),
2513            Sbp::MsgPosEcefCov(msg) => msg.message_name(),
2514            Sbp::MsgVelEcefCov(msg) => msg.message_name(),
2515            Sbp::MsgProtectionLevelDepA(msg) => msg.message_name(),
2516            Sbp::MsgProtectionLevel(msg) => msg.message_name(),
2517            Sbp::MsgPosLlhAcc(msg) => msg.message_name(),
2518            Sbp::MsgVelCog(msg) => msg.message_name(),
2519            Sbp::MsgOrientQuat(msg) => msg.message_name(),
2520            Sbp::MsgOrientEuler(msg) => msg.message_name(),
2521            Sbp::MsgAngularRate(msg) => msg.message_name(),
2522            Sbp::MsgPosEcefGnss(msg) => msg.message_name(),
2523            Sbp::MsgPosLlhGnss(msg) => msg.message_name(),
2524            Sbp::MsgVelEcefGnss(msg) => msg.message_name(),
2525            Sbp::MsgVelNedGnss(msg) => msg.message_name(),
2526            Sbp::MsgPosLlhCovGnss(msg) => msg.message_name(),
2527            Sbp::MsgVelNedCovGnss(msg) => msg.message_name(),
2528            Sbp::MsgPosEcefCovGnss(msg) => msg.message_name(),
2529            Sbp::MsgVelEcefCovGnss(msg) => msg.message_name(),
2530            Sbp::MsgUtcLeapSecond(msg) => msg.message_name(),
2531            Sbp::MsgReferenceFrameParam(msg) => msg.message_name(),
2532            Sbp::MsgPoseRelative(msg) => msg.message_name(),
2533            Sbp::MsgNdbEvent(msg) => msg.message_name(),
2534            Sbp::MsgLog(msg) => msg.message_name(),
2535            Sbp::MsgFwd(msg) => msg.message_name(),
2536            Sbp::MsgSsrOrbitClockDepA(msg) => msg.message_name(),
2537            Sbp::MsgSsrOrbitClock(msg) => msg.message_name(),
2538            Sbp::MsgSsrOrbitClockBounds(msg) => msg.message_name(),
2539            Sbp::MsgSsrOrbitClockBoundsDegradation(msg) => msg.message_name(),
2540            Sbp::MsgSsrCodeBiases(msg) => msg.message_name(),
2541            Sbp::MsgSsrPhaseBiases(msg) => msg.message_name(),
2542            Sbp::MsgSsrStecCorrectionDepA(msg) => msg.message_name(),
2543            Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.message_name(),
2544            Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.message_name(),
2545            Sbp::MsgSsrGridDefinitionDepA(msg) => msg.message_name(),
2546            Sbp::MsgSsrTileDefinitionDepA(msg) => msg.message_name(),
2547            Sbp::MsgSsrTileDefinitionDepB(msg) => msg.message_name(),
2548            Sbp::MsgSsrTileDefinition(msg) => msg.message_name(),
2549            Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.message_name(),
2550            Sbp::MsgSsrStecCorrectionDep(msg) => msg.message_name(),
2551            Sbp::MsgSsrGriddedCorrection(msg) => msg.message_name(),
2552            Sbp::MsgSsrStecCorrection(msg) => msg.message_name(),
2553            Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.message_name(),
2554            Sbp::MsgSsrSatelliteApcDep(msg) => msg.message_name(),
2555            Sbp::MsgSsrSatelliteApc(msg) => msg.message_name(),
2556            Sbp::MsgOsr(msg) => msg.message_name(),
2557            Sbp::MsgUserData(msg) => msg.message_name(),
2558            Sbp::MsgImuRaw(msg) => msg.message_name(),
2559            Sbp::MsgImuAux(msg) => msg.message_name(),
2560            Sbp::MsgMagRaw(msg) => msg.message_name(),
2561            Sbp::MsgOdometry(msg) => msg.message_name(),
2562            Sbp::MsgWheeltick(msg) => msg.message_name(),
2563            Sbp::MsgImuComp(msg) => msg.message_name(),
2564            Sbp::MsgSsrFlagHighLevelDepA(msg) => msg.message_name(),
2565            Sbp::MsgSsrFlagHighLevel(msg) => msg.message_name(),
2566            Sbp::MsgSsrFlagSatellites(msg) => msg.message_name(),
2567            Sbp::MsgSsrFlagTropoGridPoints(msg) => msg.message_name(),
2568            Sbp::MsgSsrFlagIonoGridPoints(msg) => msg.message_name(),
2569            Sbp::MsgSsrFlagIonoTileSatLos(msg) => msg.message_name(),
2570            Sbp::MsgSsrFlagIonoGridPointSatLos(msg) => msg.message_name(),
2571            Sbp::MsgAcknowledge(msg) => msg.message_name(),
2572            Sbp::MsgEd25519SignatureDepA(msg) => msg.message_name(),
2573            Sbp::MsgEd25519CertificateDep(msg) => msg.message_name(),
2574            Sbp::MsgEd25519SignatureDepB(msg) => msg.message_name(),
2575            Sbp::MsgEcdsaCertificate(msg) => msg.message_name(),
2576            Sbp::MsgCertificateChainDep(msg) => msg.message_name(),
2577            Sbp::MsgEcdsaSignatureDepA(msg) => msg.message_name(),
2578            Sbp::MsgEcdsaSignatureDepB(msg) => msg.message_name(),
2579            Sbp::MsgEcdsaSignature(msg) => msg.message_name(),
2580            Sbp::MsgCertificateChain(msg) => msg.message_name(),
2581            Sbp::MsgAesCmacSignature(msg) => msg.message_name(),
2582            Sbp::MsgFileioConfigReq(msg) => msg.message_name(),
2583            Sbp::MsgFileioConfigResp(msg) => msg.message_name(),
2584            Sbp::MsgSbasRaw(msg) => msg.message_name(),
2585            Sbp::MsgLinuxCpuStateDepA(msg) => msg.message_name(),
2586            Sbp::MsgLinuxMemStateDepA(msg) => msg.message_name(),
2587            Sbp::MsgLinuxSysStateDepA(msg) => msg.message_name(),
2588            Sbp::MsgLinuxProcessSocketCounts(msg) => msg.message_name(),
2589            Sbp::MsgLinuxProcessSocketQueues(msg) => msg.message_name(),
2590            Sbp::MsgLinuxSocketUsage(msg) => msg.message_name(),
2591            Sbp::MsgLinuxProcessFdCount(msg) => msg.message_name(),
2592            Sbp::MsgLinuxProcessFdSummary(msg) => msg.message_name(),
2593            Sbp::MsgLinuxCpuState(msg) => msg.message_name(),
2594            Sbp::MsgLinuxMemState(msg) => msg.message_name(),
2595            Sbp::MsgLinuxSysState(msg) => msg.message_name(),
2596            Sbp::MsgMeasurementPoint(msg) => msg.message_name(),
2597            Sbp::MsgProfilingSystemInfo(msg) => msg.message_name(),
2598            Sbp::MsgProfilingThreadInfo(msg) => msg.message_name(),
2599            Sbp::MsgProfilingResourceCounter(msg) => msg.message_name(),
2600            Sbp::MsgStartup(msg) => msg.message_name(),
2601            Sbp::MsgDgnssStatus(msg) => msg.message_name(),
2602            Sbp::MsgInsStatus(msg) => msg.message_name(),
2603            Sbp::MsgCsacTelemetry(msg) => msg.message_name(),
2604            Sbp::MsgCsacTelemetryLabels(msg) => msg.message_name(),
2605            Sbp::MsgInsUpdates(msg) => msg.message_name(),
2606            Sbp::MsgGnssTimeOffset(msg) => msg.message_name(),
2607            Sbp::MsgPpsTime(msg) => msg.message_name(),
2608            Sbp::MsgSensorAidEvent(msg) => msg.message_name(),
2609            Sbp::MsgGroupMeta(msg) => msg.message_name(),
2610            Sbp::MsgSolnMeta(msg) => msg.message_name(),
2611            Sbp::MsgSolnMetaDepA(msg) => msg.message_name(),
2612            Sbp::MsgStatusJournal(msg) => msg.message_name(),
2613            Sbp::MsgStatusReport(msg) => msg.message_name(),
2614            Sbp::MsgHeartbeat(msg) => msg.message_name(),
2615            Sbp::Unknown(msg) => msg.message_name(),
2616            Sbp::Invalid(msg) => msg.message_name(),
2617        }
2618    }
2619
2620    fn message_type(&self) -> Option<u16> {
2621        match self {
2622            Sbp::MsgPrintDep(msg) => msg.message_type(),
2623            Sbp::MsgTrackingStateDetailedDep(msg) => msg.message_type(),
2624            Sbp::MsgTrackingStateDepB(msg) => msg.message_type(),
2625            Sbp::MsgAcqResultDepB(msg) => msg.message_type(),
2626            Sbp::MsgAcqResultDepA(msg) => msg.message_type(),
2627            Sbp::MsgTrackingStateDepA(msg) => msg.message_type(),
2628            Sbp::MsgThreadState(msg) => msg.message_type(),
2629            Sbp::MsgUartStateDepa(msg) => msg.message_type(),
2630            Sbp::MsgIarState(msg) => msg.message_type(),
2631            Sbp::MsgEphemerisDepA(msg) => msg.message_type(),
2632            Sbp::MsgMaskSatelliteDep(msg) => msg.message_type(),
2633            Sbp::MsgTrackingIqDepA(msg) => msg.message_type(),
2634            Sbp::MsgUartState(msg) => msg.message_type(),
2635            Sbp::MsgAcqSvProfileDep(msg) => msg.message_type(),
2636            Sbp::MsgAcqResultDepC(msg) => msg.message_type(),
2637            Sbp::MsgTrackingStateDetailedDepA(msg) => msg.message_type(),
2638            Sbp::MsgResetFilters(msg) => msg.message_type(),
2639            Sbp::MsgInitBaseDep(msg) => msg.message_type(),
2640            Sbp::MsgMaskSatellite(msg) => msg.message_type(),
2641            Sbp::MsgTrackingIqDepB(msg) => msg.message_type(),
2642            Sbp::MsgTrackingIq(msg) => msg.message_type(),
2643            Sbp::MsgAcqSvProfile(msg) => msg.message_type(),
2644            Sbp::MsgAcqResult(msg) => msg.message_type(),
2645            Sbp::MsgTrackingState(msg) => msg.message_type(),
2646            Sbp::MsgObsDepB(msg) => msg.message_type(),
2647            Sbp::MsgBasePosLlh(msg) => msg.message_type(),
2648            Sbp::MsgObsDepA(msg) => msg.message_type(),
2649            Sbp::MsgEphemerisDepB(msg) => msg.message_type(),
2650            Sbp::MsgEphemerisDepC(msg) => msg.message_type(),
2651            Sbp::MsgBasePosEcef(msg) => msg.message_type(),
2652            Sbp::MsgObsDepC(msg) => msg.message_type(),
2653            Sbp::MsgObs(msg) => msg.message_type(),
2654            Sbp::MsgSpecanDep(msg) => msg.message_type(),
2655            Sbp::MsgSpecan(msg) => msg.message_type(),
2656            Sbp::MsgMeasurementState(msg) => msg.message_type(),
2657            Sbp::MsgSetTime(msg) => msg.message_type(),
2658            Sbp::MsgAlmanac(msg) => msg.message_type(),
2659            Sbp::MsgAlmanacGpsDep(msg) => msg.message_type(),
2660            Sbp::MsgAlmanacGloDep(msg) => msg.message_type(),
2661            Sbp::MsgAlmanacGps(msg) => msg.message_type(),
2662            Sbp::MsgAlmanacGlo(msg) => msg.message_type(),
2663            Sbp::MsgGloBiases(msg) => msg.message_type(),
2664            Sbp::MsgEphemerisDepD(msg) => msg.message_type(),
2665            Sbp::MsgEphemerisGpsDepE(msg) => msg.message_type(),
2666            Sbp::MsgEphemerisSbasDepA(msg) => msg.message_type(),
2667            Sbp::MsgEphemerisGloDepA(msg) => msg.message_type(),
2668            Sbp::MsgEphemerisSbasDepB(msg) => msg.message_type(),
2669            Sbp::MsgEphemerisGloDepB(msg) => msg.message_type(),
2670            Sbp::MsgEphemerisGpsDepF(msg) => msg.message_type(),
2671            Sbp::MsgEphemerisGloDepC(msg) => msg.message_type(),
2672            Sbp::MsgEphemerisGloDepD(msg) => msg.message_type(),
2673            Sbp::MsgEphemerisBds(msg) => msg.message_type(),
2674            Sbp::MsgEphemerisGps(msg) => msg.message_type(),
2675            Sbp::MsgEphemerisGlo(msg) => msg.message_type(),
2676            Sbp::MsgEphemerisSbas(msg) => msg.message_type(),
2677            Sbp::MsgEphemerisGal(msg) => msg.message_type(),
2678            Sbp::MsgEphemerisQzss(msg) => msg.message_type(),
2679            Sbp::MsgIono(msg) => msg.message_type(),
2680            Sbp::MsgSvConfigurationGpsDep(msg) => msg.message_type(),
2681            Sbp::MsgGroupDelayDepA(msg) => msg.message_type(),
2682            Sbp::MsgGroupDelayDepB(msg) => msg.message_type(),
2683            Sbp::MsgGroupDelay(msg) => msg.message_type(),
2684            Sbp::MsgEphemerisGalDepA(msg) => msg.message_type(),
2685            Sbp::MsgGnssCapb(msg) => msg.message_type(),
2686            Sbp::MsgSvAzEl(msg) => msg.message_type(),
2687            Sbp::MsgSettingsWrite(msg) => msg.message_type(),
2688            Sbp::MsgSettingsSave(msg) => msg.message_type(),
2689            Sbp::MsgSettingsReadByIndexReq(msg) => msg.message_type(),
2690            Sbp::MsgFileioReadResp(msg) => msg.message_type(),
2691            Sbp::MsgSettingsReadReq(msg) => msg.message_type(),
2692            Sbp::MsgSettingsReadResp(msg) => msg.message_type(),
2693            Sbp::MsgSettingsReadByIndexDone(msg) => msg.message_type(),
2694            Sbp::MsgSettingsReadByIndexResp(msg) => msg.message_type(),
2695            Sbp::MsgFileioReadReq(msg) => msg.message_type(),
2696            Sbp::MsgFileioReadDirReq(msg) => msg.message_type(),
2697            Sbp::MsgFileioReadDirResp(msg) => msg.message_type(),
2698            Sbp::MsgFileioWriteResp(msg) => msg.message_type(),
2699            Sbp::MsgFileioRemove(msg) => msg.message_type(),
2700            Sbp::MsgFileioWriteReq(msg) => msg.message_type(),
2701            Sbp::MsgSettingsRegister(msg) => msg.message_type(),
2702            Sbp::MsgSettingsWriteResp(msg) => msg.message_type(),
2703            Sbp::MsgBootloaderHandshakeDepA(msg) => msg.message_type(),
2704            Sbp::MsgBootloaderJumpToApp(msg) => msg.message_type(),
2705            Sbp::MsgResetDep(msg) => msg.message_type(),
2706            Sbp::MsgBootloaderHandshakeReq(msg) => msg.message_type(),
2707            Sbp::MsgBootloaderHandshakeResp(msg) => msg.message_type(),
2708            Sbp::MsgDeviceMonitor(msg) => msg.message_type(),
2709            Sbp::MsgReset(msg) => msg.message_type(),
2710            Sbp::MsgCommandReq(msg) => msg.message_type(),
2711            Sbp::MsgCommandResp(msg) => msg.message_type(),
2712            Sbp::MsgNetworkStateReq(msg) => msg.message_type(),
2713            Sbp::MsgNetworkStateResp(msg) => msg.message_type(),
2714            Sbp::MsgCommandOutput(msg) => msg.message_type(),
2715            Sbp::MsgNetworkBandwidthUsage(msg) => msg.message_type(),
2716            Sbp::MsgCellModemStatus(msg) => msg.message_type(),
2717            Sbp::MsgFrontEndGain(msg) => msg.message_type(),
2718            Sbp::MsgCwResults(msg) => msg.message_type(),
2719            Sbp::MsgCwStart(msg) => msg.message_type(),
2720            Sbp::MsgNapDeviceDnaResp(msg) => msg.message_type(),
2721            Sbp::MsgNapDeviceDnaReq(msg) => msg.message_type(),
2722            Sbp::MsgFlashDone(msg) => msg.message_type(),
2723            Sbp::MsgFlashReadResp(msg) => msg.message_type(),
2724            Sbp::MsgFlashErase(msg) => msg.message_type(),
2725            Sbp::MsgStmFlashLockSector(msg) => msg.message_type(),
2726            Sbp::MsgStmFlashUnlockSector(msg) => msg.message_type(),
2727            Sbp::MsgStmUniqueIdResp(msg) => msg.message_type(),
2728            Sbp::MsgFlashProgram(msg) => msg.message_type(),
2729            Sbp::MsgFlashReadReq(msg) => msg.message_type(),
2730            Sbp::MsgStmUniqueIdReq(msg) => msg.message_type(),
2731            Sbp::MsgM25FlashWriteStatus(msg) => msg.message_type(),
2732            Sbp::MsgGpsTimeDepA(msg) => msg.message_type(),
2733            Sbp::MsgExtEvent(msg) => msg.message_type(),
2734            Sbp::MsgGpsTime(msg) => msg.message_type(),
2735            Sbp::MsgUtcTime(msg) => msg.message_type(),
2736            Sbp::MsgGpsTimeGnss(msg) => msg.message_type(),
2737            Sbp::MsgUtcTimeGnss(msg) => msg.message_type(),
2738            Sbp::MsgTelSv(msg) => msg.message_type(),
2739            Sbp::MsgSettingsRegisterResp(msg) => msg.message_type(),
2740            Sbp::MsgPosEcefDepA(msg) => msg.message_type(),
2741            Sbp::MsgPosLlhDepA(msg) => msg.message_type(),
2742            Sbp::MsgBaselineEcefDepA(msg) => msg.message_type(),
2743            Sbp::MsgBaselineNedDepA(msg) => msg.message_type(),
2744            Sbp::MsgVelEcefDepA(msg) => msg.message_type(),
2745            Sbp::MsgVelNedDepA(msg) => msg.message_type(),
2746            Sbp::MsgDopsDepA(msg) => msg.message_type(),
2747            Sbp::MsgBaselineHeadingDepA(msg) => msg.message_type(),
2748            Sbp::MsgDops(msg) => msg.message_type(),
2749            Sbp::MsgPosEcef(msg) => msg.message_type(),
2750            Sbp::MsgPosLlh(msg) => msg.message_type(),
2751            Sbp::MsgBaselineEcef(msg) => msg.message_type(),
2752            Sbp::MsgBaselineNed(msg) => msg.message_type(),
2753            Sbp::MsgVelEcef(msg) => msg.message_type(),
2754            Sbp::MsgVelNed(msg) => msg.message_type(),
2755            Sbp::MsgBaselineHeading(msg) => msg.message_type(),
2756            Sbp::MsgAgeCorrections(msg) => msg.message_type(),
2757            Sbp::MsgPosLlhCov(msg) => msg.message_type(),
2758            Sbp::MsgVelNedCov(msg) => msg.message_type(),
2759            Sbp::MsgVelBody(msg) => msg.message_type(),
2760            Sbp::MsgPosEcefCov(msg) => msg.message_type(),
2761            Sbp::MsgVelEcefCov(msg) => msg.message_type(),
2762            Sbp::MsgProtectionLevelDepA(msg) => msg.message_type(),
2763            Sbp::MsgProtectionLevel(msg) => msg.message_type(),
2764            Sbp::MsgPosLlhAcc(msg) => msg.message_type(),
2765            Sbp::MsgVelCog(msg) => msg.message_type(),
2766            Sbp::MsgOrientQuat(msg) => msg.message_type(),
2767            Sbp::MsgOrientEuler(msg) => msg.message_type(),
2768            Sbp::MsgAngularRate(msg) => msg.message_type(),
2769            Sbp::MsgPosEcefGnss(msg) => msg.message_type(),
2770            Sbp::MsgPosLlhGnss(msg) => msg.message_type(),
2771            Sbp::MsgVelEcefGnss(msg) => msg.message_type(),
2772            Sbp::MsgVelNedGnss(msg) => msg.message_type(),
2773            Sbp::MsgPosLlhCovGnss(msg) => msg.message_type(),
2774            Sbp::MsgVelNedCovGnss(msg) => msg.message_type(),
2775            Sbp::MsgPosEcefCovGnss(msg) => msg.message_type(),
2776            Sbp::MsgVelEcefCovGnss(msg) => msg.message_type(),
2777            Sbp::MsgUtcLeapSecond(msg) => msg.message_type(),
2778            Sbp::MsgReferenceFrameParam(msg) => msg.message_type(),
2779            Sbp::MsgPoseRelative(msg) => msg.message_type(),
2780            Sbp::MsgNdbEvent(msg) => msg.message_type(),
2781            Sbp::MsgLog(msg) => msg.message_type(),
2782            Sbp::MsgFwd(msg) => msg.message_type(),
2783            Sbp::MsgSsrOrbitClockDepA(msg) => msg.message_type(),
2784            Sbp::MsgSsrOrbitClock(msg) => msg.message_type(),
2785            Sbp::MsgSsrOrbitClockBounds(msg) => msg.message_type(),
2786            Sbp::MsgSsrOrbitClockBoundsDegradation(msg) => msg.message_type(),
2787            Sbp::MsgSsrCodeBiases(msg) => msg.message_type(),
2788            Sbp::MsgSsrPhaseBiases(msg) => msg.message_type(),
2789            Sbp::MsgSsrStecCorrectionDepA(msg) => msg.message_type(),
2790            Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.message_type(),
2791            Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.message_type(),
2792            Sbp::MsgSsrGridDefinitionDepA(msg) => msg.message_type(),
2793            Sbp::MsgSsrTileDefinitionDepA(msg) => msg.message_type(),
2794            Sbp::MsgSsrTileDefinitionDepB(msg) => msg.message_type(),
2795            Sbp::MsgSsrTileDefinition(msg) => msg.message_type(),
2796            Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.message_type(),
2797            Sbp::MsgSsrStecCorrectionDep(msg) => msg.message_type(),
2798            Sbp::MsgSsrGriddedCorrection(msg) => msg.message_type(),
2799            Sbp::MsgSsrStecCorrection(msg) => msg.message_type(),
2800            Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.message_type(),
2801            Sbp::MsgSsrSatelliteApcDep(msg) => msg.message_type(),
2802            Sbp::MsgSsrSatelliteApc(msg) => msg.message_type(),
2803            Sbp::MsgOsr(msg) => msg.message_type(),
2804            Sbp::MsgUserData(msg) => msg.message_type(),
2805            Sbp::MsgImuRaw(msg) => msg.message_type(),
2806            Sbp::MsgImuAux(msg) => msg.message_type(),
2807            Sbp::MsgMagRaw(msg) => msg.message_type(),
2808            Sbp::MsgOdometry(msg) => msg.message_type(),
2809            Sbp::MsgWheeltick(msg) => msg.message_type(),
2810            Sbp::MsgImuComp(msg) => msg.message_type(),
2811            Sbp::MsgSsrFlagHighLevelDepA(msg) => msg.message_type(),
2812            Sbp::MsgSsrFlagHighLevel(msg) => msg.message_type(),
2813            Sbp::MsgSsrFlagSatellites(msg) => msg.message_type(),
2814            Sbp::MsgSsrFlagTropoGridPoints(msg) => msg.message_type(),
2815            Sbp::MsgSsrFlagIonoGridPoints(msg) => msg.message_type(),
2816            Sbp::MsgSsrFlagIonoTileSatLos(msg) => msg.message_type(),
2817            Sbp::MsgSsrFlagIonoGridPointSatLos(msg) => msg.message_type(),
2818            Sbp::MsgAcknowledge(msg) => msg.message_type(),
2819            Sbp::MsgEd25519SignatureDepA(msg) => msg.message_type(),
2820            Sbp::MsgEd25519CertificateDep(msg) => msg.message_type(),
2821            Sbp::MsgEd25519SignatureDepB(msg) => msg.message_type(),
2822            Sbp::MsgEcdsaCertificate(msg) => msg.message_type(),
2823            Sbp::MsgCertificateChainDep(msg) => msg.message_type(),
2824            Sbp::MsgEcdsaSignatureDepA(msg) => msg.message_type(),
2825            Sbp::MsgEcdsaSignatureDepB(msg) => msg.message_type(),
2826            Sbp::MsgEcdsaSignature(msg) => msg.message_type(),
2827            Sbp::MsgCertificateChain(msg) => msg.message_type(),
2828            Sbp::MsgAesCmacSignature(msg) => msg.message_type(),
2829            Sbp::MsgFileioConfigReq(msg) => msg.message_type(),
2830            Sbp::MsgFileioConfigResp(msg) => msg.message_type(),
2831            Sbp::MsgSbasRaw(msg) => msg.message_type(),
2832            Sbp::MsgLinuxCpuStateDepA(msg) => msg.message_type(),
2833            Sbp::MsgLinuxMemStateDepA(msg) => msg.message_type(),
2834            Sbp::MsgLinuxSysStateDepA(msg) => msg.message_type(),
2835            Sbp::MsgLinuxProcessSocketCounts(msg) => msg.message_type(),
2836            Sbp::MsgLinuxProcessSocketQueues(msg) => msg.message_type(),
2837            Sbp::MsgLinuxSocketUsage(msg) => msg.message_type(),
2838            Sbp::MsgLinuxProcessFdCount(msg) => msg.message_type(),
2839            Sbp::MsgLinuxProcessFdSummary(msg) => msg.message_type(),
2840            Sbp::MsgLinuxCpuState(msg) => msg.message_type(),
2841            Sbp::MsgLinuxMemState(msg) => msg.message_type(),
2842            Sbp::MsgLinuxSysState(msg) => msg.message_type(),
2843            Sbp::MsgMeasurementPoint(msg) => msg.message_type(),
2844            Sbp::MsgProfilingSystemInfo(msg) => msg.message_type(),
2845            Sbp::MsgProfilingThreadInfo(msg) => msg.message_type(),
2846            Sbp::MsgProfilingResourceCounter(msg) => msg.message_type(),
2847            Sbp::MsgStartup(msg) => msg.message_type(),
2848            Sbp::MsgDgnssStatus(msg) => msg.message_type(),
2849            Sbp::MsgInsStatus(msg) => msg.message_type(),
2850            Sbp::MsgCsacTelemetry(msg) => msg.message_type(),
2851            Sbp::MsgCsacTelemetryLabels(msg) => msg.message_type(),
2852            Sbp::MsgInsUpdates(msg) => msg.message_type(),
2853            Sbp::MsgGnssTimeOffset(msg) => msg.message_type(),
2854            Sbp::MsgPpsTime(msg) => msg.message_type(),
2855            Sbp::MsgSensorAidEvent(msg) => msg.message_type(),
2856            Sbp::MsgGroupMeta(msg) => msg.message_type(),
2857            Sbp::MsgSolnMeta(msg) => msg.message_type(),
2858            Sbp::MsgSolnMetaDepA(msg) => msg.message_type(),
2859            Sbp::MsgStatusJournal(msg) => msg.message_type(),
2860            Sbp::MsgStatusReport(msg) => msg.message_type(),
2861            Sbp::MsgHeartbeat(msg) => msg.message_type(),
2862            Sbp::Unknown(msg) => msg.message_type(),
2863            Sbp::Invalid(msg) => msg.message_type(),
2864        }
2865    }
2866
2867    fn sender_id(&self) -> Option<u16> {
2868        match self {
2869            Sbp::MsgPrintDep(msg) => msg.sender_id(),
2870            Sbp::MsgTrackingStateDetailedDep(msg) => msg.sender_id(),
2871            Sbp::MsgTrackingStateDepB(msg) => msg.sender_id(),
2872            Sbp::MsgAcqResultDepB(msg) => msg.sender_id(),
2873            Sbp::MsgAcqResultDepA(msg) => msg.sender_id(),
2874            Sbp::MsgTrackingStateDepA(msg) => msg.sender_id(),
2875            Sbp::MsgThreadState(msg) => msg.sender_id(),
2876            Sbp::MsgUartStateDepa(msg) => msg.sender_id(),
2877            Sbp::MsgIarState(msg) => msg.sender_id(),
2878            Sbp::MsgEphemerisDepA(msg) => msg.sender_id(),
2879            Sbp::MsgMaskSatelliteDep(msg) => msg.sender_id(),
2880            Sbp::MsgTrackingIqDepA(msg) => msg.sender_id(),
2881            Sbp::MsgUartState(msg) => msg.sender_id(),
2882            Sbp::MsgAcqSvProfileDep(msg) => msg.sender_id(),
2883            Sbp::MsgAcqResultDepC(msg) => msg.sender_id(),
2884            Sbp::MsgTrackingStateDetailedDepA(msg) => msg.sender_id(),
2885            Sbp::MsgResetFilters(msg) => msg.sender_id(),
2886            Sbp::MsgInitBaseDep(msg) => msg.sender_id(),
2887            Sbp::MsgMaskSatellite(msg) => msg.sender_id(),
2888            Sbp::MsgTrackingIqDepB(msg) => msg.sender_id(),
2889            Sbp::MsgTrackingIq(msg) => msg.sender_id(),
2890            Sbp::MsgAcqSvProfile(msg) => msg.sender_id(),
2891            Sbp::MsgAcqResult(msg) => msg.sender_id(),
2892            Sbp::MsgTrackingState(msg) => msg.sender_id(),
2893            Sbp::MsgObsDepB(msg) => msg.sender_id(),
2894            Sbp::MsgBasePosLlh(msg) => msg.sender_id(),
2895            Sbp::MsgObsDepA(msg) => msg.sender_id(),
2896            Sbp::MsgEphemerisDepB(msg) => msg.sender_id(),
2897            Sbp::MsgEphemerisDepC(msg) => msg.sender_id(),
2898            Sbp::MsgBasePosEcef(msg) => msg.sender_id(),
2899            Sbp::MsgObsDepC(msg) => msg.sender_id(),
2900            Sbp::MsgObs(msg) => msg.sender_id(),
2901            Sbp::MsgSpecanDep(msg) => msg.sender_id(),
2902            Sbp::MsgSpecan(msg) => msg.sender_id(),
2903            Sbp::MsgMeasurementState(msg) => msg.sender_id(),
2904            Sbp::MsgSetTime(msg) => msg.sender_id(),
2905            Sbp::MsgAlmanac(msg) => msg.sender_id(),
2906            Sbp::MsgAlmanacGpsDep(msg) => msg.sender_id(),
2907            Sbp::MsgAlmanacGloDep(msg) => msg.sender_id(),
2908            Sbp::MsgAlmanacGps(msg) => msg.sender_id(),
2909            Sbp::MsgAlmanacGlo(msg) => msg.sender_id(),
2910            Sbp::MsgGloBiases(msg) => msg.sender_id(),
2911            Sbp::MsgEphemerisDepD(msg) => msg.sender_id(),
2912            Sbp::MsgEphemerisGpsDepE(msg) => msg.sender_id(),
2913            Sbp::MsgEphemerisSbasDepA(msg) => msg.sender_id(),
2914            Sbp::MsgEphemerisGloDepA(msg) => msg.sender_id(),
2915            Sbp::MsgEphemerisSbasDepB(msg) => msg.sender_id(),
2916            Sbp::MsgEphemerisGloDepB(msg) => msg.sender_id(),
2917            Sbp::MsgEphemerisGpsDepF(msg) => msg.sender_id(),
2918            Sbp::MsgEphemerisGloDepC(msg) => msg.sender_id(),
2919            Sbp::MsgEphemerisGloDepD(msg) => msg.sender_id(),
2920            Sbp::MsgEphemerisBds(msg) => msg.sender_id(),
2921            Sbp::MsgEphemerisGps(msg) => msg.sender_id(),
2922            Sbp::MsgEphemerisGlo(msg) => msg.sender_id(),
2923            Sbp::MsgEphemerisSbas(msg) => msg.sender_id(),
2924            Sbp::MsgEphemerisGal(msg) => msg.sender_id(),
2925            Sbp::MsgEphemerisQzss(msg) => msg.sender_id(),
2926            Sbp::MsgIono(msg) => msg.sender_id(),
2927            Sbp::MsgSvConfigurationGpsDep(msg) => msg.sender_id(),
2928            Sbp::MsgGroupDelayDepA(msg) => msg.sender_id(),
2929            Sbp::MsgGroupDelayDepB(msg) => msg.sender_id(),
2930            Sbp::MsgGroupDelay(msg) => msg.sender_id(),
2931            Sbp::MsgEphemerisGalDepA(msg) => msg.sender_id(),
2932            Sbp::MsgGnssCapb(msg) => msg.sender_id(),
2933            Sbp::MsgSvAzEl(msg) => msg.sender_id(),
2934            Sbp::MsgSettingsWrite(msg) => msg.sender_id(),
2935            Sbp::MsgSettingsSave(msg) => msg.sender_id(),
2936            Sbp::MsgSettingsReadByIndexReq(msg) => msg.sender_id(),
2937            Sbp::MsgFileioReadResp(msg) => msg.sender_id(),
2938            Sbp::MsgSettingsReadReq(msg) => msg.sender_id(),
2939            Sbp::MsgSettingsReadResp(msg) => msg.sender_id(),
2940            Sbp::MsgSettingsReadByIndexDone(msg) => msg.sender_id(),
2941            Sbp::MsgSettingsReadByIndexResp(msg) => msg.sender_id(),
2942            Sbp::MsgFileioReadReq(msg) => msg.sender_id(),
2943            Sbp::MsgFileioReadDirReq(msg) => msg.sender_id(),
2944            Sbp::MsgFileioReadDirResp(msg) => msg.sender_id(),
2945            Sbp::MsgFileioWriteResp(msg) => msg.sender_id(),
2946            Sbp::MsgFileioRemove(msg) => msg.sender_id(),
2947            Sbp::MsgFileioWriteReq(msg) => msg.sender_id(),
2948            Sbp::MsgSettingsRegister(msg) => msg.sender_id(),
2949            Sbp::MsgSettingsWriteResp(msg) => msg.sender_id(),
2950            Sbp::MsgBootloaderHandshakeDepA(msg) => msg.sender_id(),
2951            Sbp::MsgBootloaderJumpToApp(msg) => msg.sender_id(),
2952            Sbp::MsgResetDep(msg) => msg.sender_id(),
2953            Sbp::MsgBootloaderHandshakeReq(msg) => msg.sender_id(),
2954            Sbp::MsgBootloaderHandshakeResp(msg) => msg.sender_id(),
2955            Sbp::MsgDeviceMonitor(msg) => msg.sender_id(),
2956            Sbp::MsgReset(msg) => msg.sender_id(),
2957            Sbp::MsgCommandReq(msg) => msg.sender_id(),
2958            Sbp::MsgCommandResp(msg) => msg.sender_id(),
2959            Sbp::MsgNetworkStateReq(msg) => msg.sender_id(),
2960            Sbp::MsgNetworkStateResp(msg) => msg.sender_id(),
2961            Sbp::MsgCommandOutput(msg) => msg.sender_id(),
2962            Sbp::MsgNetworkBandwidthUsage(msg) => msg.sender_id(),
2963            Sbp::MsgCellModemStatus(msg) => msg.sender_id(),
2964            Sbp::MsgFrontEndGain(msg) => msg.sender_id(),
2965            Sbp::MsgCwResults(msg) => msg.sender_id(),
2966            Sbp::MsgCwStart(msg) => msg.sender_id(),
2967            Sbp::MsgNapDeviceDnaResp(msg) => msg.sender_id(),
2968            Sbp::MsgNapDeviceDnaReq(msg) => msg.sender_id(),
2969            Sbp::MsgFlashDone(msg) => msg.sender_id(),
2970            Sbp::MsgFlashReadResp(msg) => msg.sender_id(),
2971            Sbp::MsgFlashErase(msg) => msg.sender_id(),
2972            Sbp::MsgStmFlashLockSector(msg) => msg.sender_id(),
2973            Sbp::MsgStmFlashUnlockSector(msg) => msg.sender_id(),
2974            Sbp::MsgStmUniqueIdResp(msg) => msg.sender_id(),
2975            Sbp::MsgFlashProgram(msg) => msg.sender_id(),
2976            Sbp::MsgFlashReadReq(msg) => msg.sender_id(),
2977            Sbp::MsgStmUniqueIdReq(msg) => msg.sender_id(),
2978            Sbp::MsgM25FlashWriteStatus(msg) => msg.sender_id(),
2979            Sbp::MsgGpsTimeDepA(msg) => msg.sender_id(),
2980            Sbp::MsgExtEvent(msg) => msg.sender_id(),
2981            Sbp::MsgGpsTime(msg) => msg.sender_id(),
2982            Sbp::MsgUtcTime(msg) => msg.sender_id(),
2983            Sbp::MsgGpsTimeGnss(msg) => msg.sender_id(),
2984            Sbp::MsgUtcTimeGnss(msg) => msg.sender_id(),
2985            Sbp::MsgTelSv(msg) => msg.sender_id(),
2986            Sbp::MsgSettingsRegisterResp(msg) => msg.sender_id(),
2987            Sbp::MsgPosEcefDepA(msg) => msg.sender_id(),
2988            Sbp::MsgPosLlhDepA(msg) => msg.sender_id(),
2989            Sbp::MsgBaselineEcefDepA(msg) => msg.sender_id(),
2990            Sbp::MsgBaselineNedDepA(msg) => msg.sender_id(),
2991            Sbp::MsgVelEcefDepA(msg) => msg.sender_id(),
2992            Sbp::MsgVelNedDepA(msg) => msg.sender_id(),
2993            Sbp::MsgDopsDepA(msg) => msg.sender_id(),
2994            Sbp::MsgBaselineHeadingDepA(msg) => msg.sender_id(),
2995            Sbp::MsgDops(msg) => msg.sender_id(),
2996            Sbp::MsgPosEcef(msg) => msg.sender_id(),
2997            Sbp::MsgPosLlh(msg) => msg.sender_id(),
2998            Sbp::MsgBaselineEcef(msg) => msg.sender_id(),
2999            Sbp::MsgBaselineNed(msg) => msg.sender_id(),
3000            Sbp::MsgVelEcef(msg) => msg.sender_id(),
3001            Sbp::MsgVelNed(msg) => msg.sender_id(),
3002            Sbp::MsgBaselineHeading(msg) => msg.sender_id(),
3003            Sbp::MsgAgeCorrections(msg) => msg.sender_id(),
3004            Sbp::MsgPosLlhCov(msg) => msg.sender_id(),
3005            Sbp::MsgVelNedCov(msg) => msg.sender_id(),
3006            Sbp::MsgVelBody(msg) => msg.sender_id(),
3007            Sbp::MsgPosEcefCov(msg) => msg.sender_id(),
3008            Sbp::MsgVelEcefCov(msg) => msg.sender_id(),
3009            Sbp::MsgProtectionLevelDepA(msg) => msg.sender_id(),
3010            Sbp::MsgProtectionLevel(msg) => msg.sender_id(),
3011            Sbp::MsgPosLlhAcc(msg) => msg.sender_id(),
3012            Sbp::MsgVelCog(msg) => msg.sender_id(),
3013            Sbp::MsgOrientQuat(msg) => msg.sender_id(),
3014            Sbp::MsgOrientEuler(msg) => msg.sender_id(),
3015            Sbp::MsgAngularRate(msg) => msg.sender_id(),
3016            Sbp::MsgPosEcefGnss(msg) => msg.sender_id(),
3017            Sbp::MsgPosLlhGnss(msg) => msg.sender_id(),
3018            Sbp::MsgVelEcefGnss(msg) => msg.sender_id(),
3019            Sbp::MsgVelNedGnss(msg) => msg.sender_id(),
3020            Sbp::MsgPosLlhCovGnss(msg) => msg.sender_id(),
3021            Sbp::MsgVelNedCovGnss(msg) => msg.sender_id(),
3022            Sbp::MsgPosEcefCovGnss(msg) => msg.sender_id(),
3023            Sbp::MsgVelEcefCovGnss(msg) => msg.sender_id(),
3024            Sbp::MsgUtcLeapSecond(msg) => msg.sender_id(),
3025            Sbp::MsgReferenceFrameParam(msg) => msg.sender_id(),
3026            Sbp::MsgPoseRelative(msg) => msg.sender_id(),
3027            Sbp::MsgNdbEvent(msg) => msg.sender_id(),
3028            Sbp::MsgLog(msg) => msg.sender_id(),
3029            Sbp::MsgFwd(msg) => msg.sender_id(),
3030            Sbp::MsgSsrOrbitClockDepA(msg) => msg.sender_id(),
3031            Sbp::MsgSsrOrbitClock(msg) => msg.sender_id(),
3032            Sbp::MsgSsrOrbitClockBounds(msg) => msg.sender_id(),
3033            Sbp::MsgSsrOrbitClockBoundsDegradation(msg) => msg.sender_id(),
3034            Sbp::MsgSsrCodeBiases(msg) => msg.sender_id(),
3035            Sbp::MsgSsrPhaseBiases(msg) => msg.sender_id(),
3036            Sbp::MsgSsrStecCorrectionDepA(msg) => msg.sender_id(),
3037            Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.sender_id(),
3038            Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.sender_id(),
3039            Sbp::MsgSsrGridDefinitionDepA(msg) => msg.sender_id(),
3040            Sbp::MsgSsrTileDefinitionDepA(msg) => msg.sender_id(),
3041            Sbp::MsgSsrTileDefinitionDepB(msg) => msg.sender_id(),
3042            Sbp::MsgSsrTileDefinition(msg) => msg.sender_id(),
3043            Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.sender_id(),
3044            Sbp::MsgSsrStecCorrectionDep(msg) => msg.sender_id(),
3045            Sbp::MsgSsrGriddedCorrection(msg) => msg.sender_id(),
3046            Sbp::MsgSsrStecCorrection(msg) => msg.sender_id(),
3047            Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.sender_id(),
3048            Sbp::MsgSsrSatelliteApcDep(msg) => msg.sender_id(),
3049            Sbp::MsgSsrSatelliteApc(msg) => msg.sender_id(),
3050            Sbp::MsgOsr(msg) => msg.sender_id(),
3051            Sbp::MsgUserData(msg) => msg.sender_id(),
3052            Sbp::MsgImuRaw(msg) => msg.sender_id(),
3053            Sbp::MsgImuAux(msg) => msg.sender_id(),
3054            Sbp::MsgMagRaw(msg) => msg.sender_id(),
3055            Sbp::MsgOdometry(msg) => msg.sender_id(),
3056            Sbp::MsgWheeltick(msg) => msg.sender_id(),
3057            Sbp::MsgImuComp(msg) => msg.sender_id(),
3058            Sbp::MsgSsrFlagHighLevelDepA(msg) => msg.sender_id(),
3059            Sbp::MsgSsrFlagHighLevel(msg) => msg.sender_id(),
3060            Sbp::MsgSsrFlagSatellites(msg) => msg.sender_id(),
3061            Sbp::MsgSsrFlagTropoGridPoints(msg) => msg.sender_id(),
3062            Sbp::MsgSsrFlagIonoGridPoints(msg) => msg.sender_id(),
3063            Sbp::MsgSsrFlagIonoTileSatLos(msg) => msg.sender_id(),
3064            Sbp::MsgSsrFlagIonoGridPointSatLos(msg) => msg.sender_id(),
3065            Sbp::MsgAcknowledge(msg) => msg.sender_id(),
3066            Sbp::MsgEd25519SignatureDepA(msg) => msg.sender_id(),
3067            Sbp::MsgEd25519CertificateDep(msg) => msg.sender_id(),
3068            Sbp::MsgEd25519SignatureDepB(msg) => msg.sender_id(),
3069            Sbp::MsgEcdsaCertificate(msg) => msg.sender_id(),
3070            Sbp::MsgCertificateChainDep(msg) => msg.sender_id(),
3071            Sbp::MsgEcdsaSignatureDepA(msg) => msg.sender_id(),
3072            Sbp::MsgEcdsaSignatureDepB(msg) => msg.sender_id(),
3073            Sbp::MsgEcdsaSignature(msg) => msg.sender_id(),
3074            Sbp::MsgCertificateChain(msg) => msg.sender_id(),
3075            Sbp::MsgAesCmacSignature(msg) => msg.sender_id(),
3076            Sbp::MsgFileioConfigReq(msg) => msg.sender_id(),
3077            Sbp::MsgFileioConfigResp(msg) => msg.sender_id(),
3078            Sbp::MsgSbasRaw(msg) => msg.sender_id(),
3079            Sbp::MsgLinuxCpuStateDepA(msg) => msg.sender_id(),
3080            Sbp::MsgLinuxMemStateDepA(msg) => msg.sender_id(),
3081            Sbp::MsgLinuxSysStateDepA(msg) => msg.sender_id(),
3082            Sbp::MsgLinuxProcessSocketCounts(msg) => msg.sender_id(),
3083            Sbp::MsgLinuxProcessSocketQueues(msg) => msg.sender_id(),
3084            Sbp::MsgLinuxSocketUsage(msg) => msg.sender_id(),
3085            Sbp::MsgLinuxProcessFdCount(msg) => msg.sender_id(),
3086            Sbp::MsgLinuxProcessFdSummary(msg) => msg.sender_id(),
3087            Sbp::MsgLinuxCpuState(msg) => msg.sender_id(),
3088            Sbp::MsgLinuxMemState(msg) => msg.sender_id(),
3089            Sbp::MsgLinuxSysState(msg) => msg.sender_id(),
3090            Sbp::MsgMeasurementPoint(msg) => msg.sender_id(),
3091            Sbp::MsgProfilingSystemInfo(msg) => msg.sender_id(),
3092            Sbp::MsgProfilingThreadInfo(msg) => msg.sender_id(),
3093            Sbp::MsgProfilingResourceCounter(msg) => msg.sender_id(),
3094            Sbp::MsgStartup(msg) => msg.sender_id(),
3095            Sbp::MsgDgnssStatus(msg) => msg.sender_id(),
3096            Sbp::MsgInsStatus(msg) => msg.sender_id(),
3097            Sbp::MsgCsacTelemetry(msg) => msg.sender_id(),
3098            Sbp::MsgCsacTelemetryLabels(msg) => msg.sender_id(),
3099            Sbp::MsgInsUpdates(msg) => msg.sender_id(),
3100            Sbp::MsgGnssTimeOffset(msg) => msg.sender_id(),
3101            Sbp::MsgPpsTime(msg) => msg.sender_id(),
3102            Sbp::MsgSensorAidEvent(msg) => msg.sender_id(),
3103            Sbp::MsgGroupMeta(msg) => msg.sender_id(),
3104            Sbp::MsgSolnMeta(msg) => msg.sender_id(),
3105            Sbp::MsgSolnMetaDepA(msg) => msg.sender_id(),
3106            Sbp::MsgStatusJournal(msg) => msg.sender_id(),
3107            Sbp::MsgStatusReport(msg) => msg.sender_id(),
3108            Sbp::MsgHeartbeat(msg) => msg.sender_id(),
3109            Sbp::Unknown(msg) => msg.sender_id(),
3110            Sbp::Invalid(msg) => msg.sender_id(),
3111        }
3112    }
3113
3114    fn set_sender_id(&mut self, new_id: u16) {
3115        match self {
3116            Sbp::MsgPrintDep(msg) => msg.set_sender_id(new_id),
3117            Sbp::MsgTrackingStateDetailedDep(msg) => msg.set_sender_id(new_id),
3118            Sbp::MsgTrackingStateDepB(msg) => msg.set_sender_id(new_id),
3119            Sbp::MsgAcqResultDepB(msg) => msg.set_sender_id(new_id),
3120            Sbp::MsgAcqResultDepA(msg) => msg.set_sender_id(new_id),
3121            Sbp::MsgTrackingStateDepA(msg) => msg.set_sender_id(new_id),
3122            Sbp::MsgThreadState(msg) => msg.set_sender_id(new_id),
3123            Sbp::MsgUartStateDepa(msg) => msg.set_sender_id(new_id),
3124            Sbp::MsgIarState(msg) => msg.set_sender_id(new_id),
3125            Sbp::MsgEphemerisDepA(msg) => msg.set_sender_id(new_id),
3126            Sbp::MsgMaskSatelliteDep(msg) => msg.set_sender_id(new_id),
3127            Sbp::MsgTrackingIqDepA(msg) => msg.set_sender_id(new_id),
3128            Sbp::MsgUartState(msg) => msg.set_sender_id(new_id),
3129            Sbp::MsgAcqSvProfileDep(msg) => msg.set_sender_id(new_id),
3130            Sbp::MsgAcqResultDepC(msg) => msg.set_sender_id(new_id),
3131            Sbp::MsgTrackingStateDetailedDepA(msg) => msg.set_sender_id(new_id),
3132            Sbp::MsgResetFilters(msg) => msg.set_sender_id(new_id),
3133            Sbp::MsgInitBaseDep(msg) => msg.set_sender_id(new_id),
3134            Sbp::MsgMaskSatellite(msg) => msg.set_sender_id(new_id),
3135            Sbp::MsgTrackingIqDepB(msg) => msg.set_sender_id(new_id),
3136            Sbp::MsgTrackingIq(msg) => msg.set_sender_id(new_id),
3137            Sbp::MsgAcqSvProfile(msg) => msg.set_sender_id(new_id),
3138            Sbp::MsgAcqResult(msg) => msg.set_sender_id(new_id),
3139            Sbp::MsgTrackingState(msg) => msg.set_sender_id(new_id),
3140            Sbp::MsgObsDepB(msg) => msg.set_sender_id(new_id),
3141            Sbp::MsgBasePosLlh(msg) => msg.set_sender_id(new_id),
3142            Sbp::MsgObsDepA(msg) => msg.set_sender_id(new_id),
3143            Sbp::MsgEphemerisDepB(msg) => msg.set_sender_id(new_id),
3144            Sbp::MsgEphemerisDepC(msg) => msg.set_sender_id(new_id),
3145            Sbp::MsgBasePosEcef(msg) => msg.set_sender_id(new_id),
3146            Sbp::MsgObsDepC(msg) => msg.set_sender_id(new_id),
3147            Sbp::MsgObs(msg) => msg.set_sender_id(new_id),
3148            Sbp::MsgSpecanDep(msg) => msg.set_sender_id(new_id),
3149            Sbp::MsgSpecan(msg) => msg.set_sender_id(new_id),
3150            Sbp::MsgMeasurementState(msg) => msg.set_sender_id(new_id),
3151            Sbp::MsgSetTime(msg) => msg.set_sender_id(new_id),
3152            Sbp::MsgAlmanac(msg) => msg.set_sender_id(new_id),
3153            Sbp::MsgAlmanacGpsDep(msg) => msg.set_sender_id(new_id),
3154            Sbp::MsgAlmanacGloDep(msg) => msg.set_sender_id(new_id),
3155            Sbp::MsgAlmanacGps(msg) => msg.set_sender_id(new_id),
3156            Sbp::MsgAlmanacGlo(msg) => msg.set_sender_id(new_id),
3157            Sbp::MsgGloBiases(msg) => msg.set_sender_id(new_id),
3158            Sbp::MsgEphemerisDepD(msg) => msg.set_sender_id(new_id),
3159            Sbp::MsgEphemerisGpsDepE(msg) => msg.set_sender_id(new_id),
3160            Sbp::MsgEphemerisSbasDepA(msg) => msg.set_sender_id(new_id),
3161            Sbp::MsgEphemerisGloDepA(msg) => msg.set_sender_id(new_id),
3162            Sbp::MsgEphemerisSbasDepB(msg) => msg.set_sender_id(new_id),
3163            Sbp::MsgEphemerisGloDepB(msg) => msg.set_sender_id(new_id),
3164            Sbp::MsgEphemerisGpsDepF(msg) => msg.set_sender_id(new_id),
3165            Sbp::MsgEphemerisGloDepC(msg) => msg.set_sender_id(new_id),
3166            Sbp::MsgEphemerisGloDepD(msg) => msg.set_sender_id(new_id),
3167            Sbp::MsgEphemerisBds(msg) => msg.set_sender_id(new_id),
3168            Sbp::MsgEphemerisGps(msg) => msg.set_sender_id(new_id),
3169            Sbp::MsgEphemerisGlo(msg) => msg.set_sender_id(new_id),
3170            Sbp::MsgEphemerisSbas(msg) => msg.set_sender_id(new_id),
3171            Sbp::MsgEphemerisGal(msg) => msg.set_sender_id(new_id),
3172            Sbp::MsgEphemerisQzss(msg) => msg.set_sender_id(new_id),
3173            Sbp::MsgIono(msg) => msg.set_sender_id(new_id),
3174            Sbp::MsgSvConfigurationGpsDep(msg) => msg.set_sender_id(new_id),
3175            Sbp::MsgGroupDelayDepA(msg) => msg.set_sender_id(new_id),
3176            Sbp::MsgGroupDelayDepB(msg) => msg.set_sender_id(new_id),
3177            Sbp::MsgGroupDelay(msg) => msg.set_sender_id(new_id),
3178            Sbp::MsgEphemerisGalDepA(msg) => msg.set_sender_id(new_id),
3179            Sbp::MsgGnssCapb(msg) => msg.set_sender_id(new_id),
3180            Sbp::MsgSvAzEl(msg) => msg.set_sender_id(new_id),
3181            Sbp::MsgSettingsWrite(msg) => msg.set_sender_id(new_id),
3182            Sbp::MsgSettingsSave(msg) => msg.set_sender_id(new_id),
3183            Sbp::MsgSettingsReadByIndexReq(msg) => msg.set_sender_id(new_id),
3184            Sbp::MsgFileioReadResp(msg) => msg.set_sender_id(new_id),
3185            Sbp::MsgSettingsReadReq(msg) => msg.set_sender_id(new_id),
3186            Sbp::MsgSettingsReadResp(msg) => msg.set_sender_id(new_id),
3187            Sbp::MsgSettingsReadByIndexDone(msg) => msg.set_sender_id(new_id),
3188            Sbp::MsgSettingsReadByIndexResp(msg) => msg.set_sender_id(new_id),
3189            Sbp::MsgFileioReadReq(msg) => msg.set_sender_id(new_id),
3190            Sbp::MsgFileioReadDirReq(msg) => msg.set_sender_id(new_id),
3191            Sbp::MsgFileioReadDirResp(msg) => msg.set_sender_id(new_id),
3192            Sbp::MsgFileioWriteResp(msg) => msg.set_sender_id(new_id),
3193            Sbp::MsgFileioRemove(msg) => msg.set_sender_id(new_id),
3194            Sbp::MsgFileioWriteReq(msg) => msg.set_sender_id(new_id),
3195            Sbp::MsgSettingsRegister(msg) => msg.set_sender_id(new_id),
3196            Sbp::MsgSettingsWriteResp(msg) => msg.set_sender_id(new_id),
3197            Sbp::MsgBootloaderHandshakeDepA(msg) => msg.set_sender_id(new_id),
3198            Sbp::MsgBootloaderJumpToApp(msg) => msg.set_sender_id(new_id),
3199            Sbp::MsgResetDep(msg) => msg.set_sender_id(new_id),
3200            Sbp::MsgBootloaderHandshakeReq(msg) => msg.set_sender_id(new_id),
3201            Sbp::MsgBootloaderHandshakeResp(msg) => msg.set_sender_id(new_id),
3202            Sbp::MsgDeviceMonitor(msg) => msg.set_sender_id(new_id),
3203            Sbp::MsgReset(msg) => msg.set_sender_id(new_id),
3204            Sbp::MsgCommandReq(msg) => msg.set_sender_id(new_id),
3205            Sbp::MsgCommandResp(msg) => msg.set_sender_id(new_id),
3206            Sbp::MsgNetworkStateReq(msg) => msg.set_sender_id(new_id),
3207            Sbp::MsgNetworkStateResp(msg) => msg.set_sender_id(new_id),
3208            Sbp::MsgCommandOutput(msg) => msg.set_sender_id(new_id),
3209            Sbp::MsgNetworkBandwidthUsage(msg) => msg.set_sender_id(new_id),
3210            Sbp::MsgCellModemStatus(msg) => msg.set_sender_id(new_id),
3211            Sbp::MsgFrontEndGain(msg) => msg.set_sender_id(new_id),
3212            Sbp::MsgCwResults(msg) => msg.set_sender_id(new_id),
3213            Sbp::MsgCwStart(msg) => msg.set_sender_id(new_id),
3214            Sbp::MsgNapDeviceDnaResp(msg) => msg.set_sender_id(new_id),
3215            Sbp::MsgNapDeviceDnaReq(msg) => msg.set_sender_id(new_id),
3216            Sbp::MsgFlashDone(msg) => msg.set_sender_id(new_id),
3217            Sbp::MsgFlashReadResp(msg) => msg.set_sender_id(new_id),
3218            Sbp::MsgFlashErase(msg) => msg.set_sender_id(new_id),
3219            Sbp::MsgStmFlashLockSector(msg) => msg.set_sender_id(new_id),
3220            Sbp::MsgStmFlashUnlockSector(msg) => msg.set_sender_id(new_id),
3221            Sbp::MsgStmUniqueIdResp(msg) => msg.set_sender_id(new_id),
3222            Sbp::MsgFlashProgram(msg) => msg.set_sender_id(new_id),
3223            Sbp::MsgFlashReadReq(msg) => msg.set_sender_id(new_id),
3224            Sbp::MsgStmUniqueIdReq(msg) => msg.set_sender_id(new_id),
3225            Sbp::MsgM25FlashWriteStatus(msg) => msg.set_sender_id(new_id),
3226            Sbp::MsgGpsTimeDepA(msg) => msg.set_sender_id(new_id),
3227            Sbp::MsgExtEvent(msg) => msg.set_sender_id(new_id),
3228            Sbp::MsgGpsTime(msg) => msg.set_sender_id(new_id),
3229            Sbp::MsgUtcTime(msg) => msg.set_sender_id(new_id),
3230            Sbp::MsgGpsTimeGnss(msg) => msg.set_sender_id(new_id),
3231            Sbp::MsgUtcTimeGnss(msg) => msg.set_sender_id(new_id),
3232            Sbp::MsgTelSv(msg) => msg.set_sender_id(new_id),
3233            Sbp::MsgSettingsRegisterResp(msg) => msg.set_sender_id(new_id),
3234            Sbp::MsgPosEcefDepA(msg) => msg.set_sender_id(new_id),
3235            Sbp::MsgPosLlhDepA(msg) => msg.set_sender_id(new_id),
3236            Sbp::MsgBaselineEcefDepA(msg) => msg.set_sender_id(new_id),
3237            Sbp::MsgBaselineNedDepA(msg) => msg.set_sender_id(new_id),
3238            Sbp::MsgVelEcefDepA(msg) => msg.set_sender_id(new_id),
3239            Sbp::MsgVelNedDepA(msg) => msg.set_sender_id(new_id),
3240            Sbp::MsgDopsDepA(msg) => msg.set_sender_id(new_id),
3241            Sbp::MsgBaselineHeadingDepA(msg) => msg.set_sender_id(new_id),
3242            Sbp::MsgDops(msg) => msg.set_sender_id(new_id),
3243            Sbp::MsgPosEcef(msg) => msg.set_sender_id(new_id),
3244            Sbp::MsgPosLlh(msg) => msg.set_sender_id(new_id),
3245            Sbp::MsgBaselineEcef(msg) => msg.set_sender_id(new_id),
3246            Sbp::MsgBaselineNed(msg) => msg.set_sender_id(new_id),
3247            Sbp::MsgVelEcef(msg) => msg.set_sender_id(new_id),
3248            Sbp::MsgVelNed(msg) => msg.set_sender_id(new_id),
3249            Sbp::MsgBaselineHeading(msg) => msg.set_sender_id(new_id),
3250            Sbp::MsgAgeCorrections(msg) => msg.set_sender_id(new_id),
3251            Sbp::MsgPosLlhCov(msg) => msg.set_sender_id(new_id),
3252            Sbp::MsgVelNedCov(msg) => msg.set_sender_id(new_id),
3253            Sbp::MsgVelBody(msg) => msg.set_sender_id(new_id),
3254            Sbp::MsgPosEcefCov(msg) => msg.set_sender_id(new_id),
3255            Sbp::MsgVelEcefCov(msg) => msg.set_sender_id(new_id),
3256            Sbp::MsgProtectionLevelDepA(msg) => msg.set_sender_id(new_id),
3257            Sbp::MsgProtectionLevel(msg) => msg.set_sender_id(new_id),
3258            Sbp::MsgPosLlhAcc(msg) => msg.set_sender_id(new_id),
3259            Sbp::MsgVelCog(msg) => msg.set_sender_id(new_id),
3260            Sbp::MsgOrientQuat(msg) => msg.set_sender_id(new_id),
3261            Sbp::MsgOrientEuler(msg) => msg.set_sender_id(new_id),
3262            Sbp::MsgAngularRate(msg) => msg.set_sender_id(new_id),
3263            Sbp::MsgPosEcefGnss(msg) => msg.set_sender_id(new_id),
3264            Sbp::MsgPosLlhGnss(msg) => msg.set_sender_id(new_id),
3265            Sbp::MsgVelEcefGnss(msg) => msg.set_sender_id(new_id),
3266            Sbp::MsgVelNedGnss(msg) => msg.set_sender_id(new_id),
3267            Sbp::MsgPosLlhCovGnss(msg) => msg.set_sender_id(new_id),
3268            Sbp::MsgVelNedCovGnss(msg) => msg.set_sender_id(new_id),
3269            Sbp::MsgPosEcefCovGnss(msg) => msg.set_sender_id(new_id),
3270            Sbp::MsgVelEcefCovGnss(msg) => msg.set_sender_id(new_id),
3271            Sbp::MsgUtcLeapSecond(msg) => msg.set_sender_id(new_id),
3272            Sbp::MsgReferenceFrameParam(msg) => msg.set_sender_id(new_id),
3273            Sbp::MsgPoseRelative(msg) => msg.set_sender_id(new_id),
3274            Sbp::MsgNdbEvent(msg) => msg.set_sender_id(new_id),
3275            Sbp::MsgLog(msg) => msg.set_sender_id(new_id),
3276            Sbp::MsgFwd(msg) => msg.set_sender_id(new_id),
3277            Sbp::MsgSsrOrbitClockDepA(msg) => msg.set_sender_id(new_id),
3278            Sbp::MsgSsrOrbitClock(msg) => msg.set_sender_id(new_id),
3279            Sbp::MsgSsrOrbitClockBounds(msg) => msg.set_sender_id(new_id),
3280            Sbp::MsgSsrOrbitClockBoundsDegradation(msg) => msg.set_sender_id(new_id),
3281            Sbp::MsgSsrCodeBiases(msg) => msg.set_sender_id(new_id),
3282            Sbp::MsgSsrPhaseBiases(msg) => msg.set_sender_id(new_id),
3283            Sbp::MsgSsrStecCorrectionDepA(msg) => msg.set_sender_id(new_id),
3284            Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.set_sender_id(new_id),
3285            Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.set_sender_id(new_id),
3286            Sbp::MsgSsrGridDefinitionDepA(msg) => msg.set_sender_id(new_id),
3287            Sbp::MsgSsrTileDefinitionDepA(msg) => msg.set_sender_id(new_id),
3288            Sbp::MsgSsrTileDefinitionDepB(msg) => msg.set_sender_id(new_id),
3289            Sbp::MsgSsrTileDefinition(msg) => msg.set_sender_id(new_id),
3290            Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.set_sender_id(new_id),
3291            Sbp::MsgSsrStecCorrectionDep(msg) => msg.set_sender_id(new_id),
3292            Sbp::MsgSsrGriddedCorrection(msg) => msg.set_sender_id(new_id),
3293            Sbp::MsgSsrStecCorrection(msg) => msg.set_sender_id(new_id),
3294            Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.set_sender_id(new_id),
3295            Sbp::MsgSsrSatelliteApcDep(msg) => msg.set_sender_id(new_id),
3296            Sbp::MsgSsrSatelliteApc(msg) => msg.set_sender_id(new_id),
3297            Sbp::MsgOsr(msg) => msg.set_sender_id(new_id),
3298            Sbp::MsgUserData(msg) => msg.set_sender_id(new_id),
3299            Sbp::MsgImuRaw(msg) => msg.set_sender_id(new_id),
3300            Sbp::MsgImuAux(msg) => msg.set_sender_id(new_id),
3301            Sbp::MsgMagRaw(msg) => msg.set_sender_id(new_id),
3302            Sbp::MsgOdometry(msg) => msg.set_sender_id(new_id),
3303            Sbp::MsgWheeltick(msg) => msg.set_sender_id(new_id),
3304            Sbp::MsgImuComp(msg) => msg.set_sender_id(new_id),
3305            Sbp::MsgSsrFlagHighLevelDepA(msg) => msg.set_sender_id(new_id),
3306            Sbp::MsgSsrFlagHighLevel(msg) => msg.set_sender_id(new_id),
3307            Sbp::MsgSsrFlagSatellites(msg) => msg.set_sender_id(new_id),
3308            Sbp::MsgSsrFlagTropoGridPoints(msg) => msg.set_sender_id(new_id),
3309            Sbp::MsgSsrFlagIonoGridPoints(msg) => msg.set_sender_id(new_id),
3310            Sbp::MsgSsrFlagIonoTileSatLos(msg) => msg.set_sender_id(new_id),
3311            Sbp::MsgSsrFlagIonoGridPointSatLos(msg) => msg.set_sender_id(new_id),
3312            Sbp::MsgAcknowledge(msg) => msg.set_sender_id(new_id),
3313            Sbp::MsgEd25519SignatureDepA(msg) => msg.set_sender_id(new_id),
3314            Sbp::MsgEd25519CertificateDep(msg) => msg.set_sender_id(new_id),
3315            Sbp::MsgEd25519SignatureDepB(msg) => msg.set_sender_id(new_id),
3316            Sbp::MsgEcdsaCertificate(msg) => msg.set_sender_id(new_id),
3317            Sbp::MsgCertificateChainDep(msg) => msg.set_sender_id(new_id),
3318            Sbp::MsgEcdsaSignatureDepA(msg) => msg.set_sender_id(new_id),
3319            Sbp::MsgEcdsaSignatureDepB(msg) => msg.set_sender_id(new_id),
3320            Sbp::MsgEcdsaSignature(msg) => msg.set_sender_id(new_id),
3321            Sbp::MsgCertificateChain(msg) => msg.set_sender_id(new_id),
3322            Sbp::MsgAesCmacSignature(msg) => msg.set_sender_id(new_id),
3323            Sbp::MsgFileioConfigReq(msg) => msg.set_sender_id(new_id),
3324            Sbp::MsgFileioConfigResp(msg) => msg.set_sender_id(new_id),
3325            Sbp::MsgSbasRaw(msg) => msg.set_sender_id(new_id),
3326            Sbp::MsgLinuxCpuStateDepA(msg) => msg.set_sender_id(new_id),
3327            Sbp::MsgLinuxMemStateDepA(msg) => msg.set_sender_id(new_id),
3328            Sbp::MsgLinuxSysStateDepA(msg) => msg.set_sender_id(new_id),
3329            Sbp::MsgLinuxProcessSocketCounts(msg) => msg.set_sender_id(new_id),
3330            Sbp::MsgLinuxProcessSocketQueues(msg) => msg.set_sender_id(new_id),
3331            Sbp::MsgLinuxSocketUsage(msg) => msg.set_sender_id(new_id),
3332            Sbp::MsgLinuxProcessFdCount(msg) => msg.set_sender_id(new_id),
3333            Sbp::MsgLinuxProcessFdSummary(msg) => msg.set_sender_id(new_id),
3334            Sbp::MsgLinuxCpuState(msg) => msg.set_sender_id(new_id),
3335            Sbp::MsgLinuxMemState(msg) => msg.set_sender_id(new_id),
3336            Sbp::MsgLinuxSysState(msg) => msg.set_sender_id(new_id),
3337            Sbp::MsgMeasurementPoint(msg) => msg.set_sender_id(new_id),
3338            Sbp::MsgProfilingSystemInfo(msg) => msg.set_sender_id(new_id),
3339            Sbp::MsgProfilingThreadInfo(msg) => msg.set_sender_id(new_id),
3340            Sbp::MsgProfilingResourceCounter(msg) => msg.set_sender_id(new_id),
3341            Sbp::MsgStartup(msg) => msg.set_sender_id(new_id),
3342            Sbp::MsgDgnssStatus(msg) => msg.set_sender_id(new_id),
3343            Sbp::MsgInsStatus(msg) => msg.set_sender_id(new_id),
3344            Sbp::MsgCsacTelemetry(msg) => msg.set_sender_id(new_id),
3345            Sbp::MsgCsacTelemetryLabels(msg) => msg.set_sender_id(new_id),
3346            Sbp::MsgInsUpdates(msg) => msg.set_sender_id(new_id),
3347            Sbp::MsgGnssTimeOffset(msg) => msg.set_sender_id(new_id),
3348            Sbp::MsgPpsTime(msg) => msg.set_sender_id(new_id),
3349            Sbp::MsgSensorAidEvent(msg) => msg.set_sender_id(new_id),
3350            Sbp::MsgGroupMeta(msg) => msg.set_sender_id(new_id),
3351            Sbp::MsgSolnMeta(msg) => msg.set_sender_id(new_id),
3352            Sbp::MsgSolnMetaDepA(msg) => msg.set_sender_id(new_id),
3353            Sbp::MsgStatusJournal(msg) => msg.set_sender_id(new_id),
3354            Sbp::MsgStatusReport(msg) => msg.set_sender_id(new_id),
3355            Sbp::MsgHeartbeat(msg) => msg.set_sender_id(new_id),
3356            Sbp::Unknown(msg) => msg.set_sender_id(new_id),
3357            Sbp::Invalid(msg) => msg.set_sender_id(new_id),
3358        }
3359    }
3360
3361    fn encoded_len(&self) -> usize {
3362        match self {
3363            Sbp::MsgPrintDep(msg) => msg.encoded_len(),
3364            Sbp::MsgTrackingStateDetailedDep(msg) => msg.encoded_len(),
3365            Sbp::MsgTrackingStateDepB(msg) => msg.encoded_len(),
3366            Sbp::MsgAcqResultDepB(msg) => msg.encoded_len(),
3367            Sbp::MsgAcqResultDepA(msg) => msg.encoded_len(),
3368            Sbp::MsgTrackingStateDepA(msg) => msg.encoded_len(),
3369            Sbp::MsgThreadState(msg) => msg.encoded_len(),
3370            Sbp::MsgUartStateDepa(msg) => msg.encoded_len(),
3371            Sbp::MsgIarState(msg) => msg.encoded_len(),
3372            Sbp::MsgEphemerisDepA(msg) => msg.encoded_len(),
3373            Sbp::MsgMaskSatelliteDep(msg) => msg.encoded_len(),
3374            Sbp::MsgTrackingIqDepA(msg) => msg.encoded_len(),
3375            Sbp::MsgUartState(msg) => msg.encoded_len(),
3376            Sbp::MsgAcqSvProfileDep(msg) => msg.encoded_len(),
3377            Sbp::MsgAcqResultDepC(msg) => msg.encoded_len(),
3378            Sbp::MsgTrackingStateDetailedDepA(msg) => msg.encoded_len(),
3379            Sbp::MsgResetFilters(msg) => msg.encoded_len(),
3380            Sbp::MsgInitBaseDep(msg) => msg.encoded_len(),
3381            Sbp::MsgMaskSatellite(msg) => msg.encoded_len(),
3382            Sbp::MsgTrackingIqDepB(msg) => msg.encoded_len(),
3383            Sbp::MsgTrackingIq(msg) => msg.encoded_len(),
3384            Sbp::MsgAcqSvProfile(msg) => msg.encoded_len(),
3385            Sbp::MsgAcqResult(msg) => msg.encoded_len(),
3386            Sbp::MsgTrackingState(msg) => msg.encoded_len(),
3387            Sbp::MsgObsDepB(msg) => msg.encoded_len(),
3388            Sbp::MsgBasePosLlh(msg) => msg.encoded_len(),
3389            Sbp::MsgObsDepA(msg) => msg.encoded_len(),
3390            Sbp::MsgEphemerisDepB(msg) => msg.encoded_len(),
3391            Sbp::MsgEphemerisDepC(msg) => msg.encoded_len(),
3392            Sbp::MsgBasePosEcef(msg) => msg.encoded_len(),
3393            Sbp::MsgObsDepC(msg) => msg.encoded_len(),
3394            Sbp::MsgObs(msg) => msg.encoded_len(),
3395            Sbp::MsgSpecanDep(msg) => msg.encoded_len(),
3396            Sbp::MsgSpecan(msg) => msg.encoded_len(),
3397            Sbp::MsgMeasurementState(msg) => msg.encoded_len(),
3398            Sbp::MsgSetTime(msg) => msg.encoded_len(),
3399            Sbp::MsgAlmanac(msg) => msg.encoded_len(),
3400            Sbp::MsgAlmanacGpsDep(msg) => msg.encoded_len(),
3401            Sbp::MsgAlmanacGloDep(msg) => msg.encoded_len(),
3402            Sbp::MsgAlmanacGps(msg) => msg.encoded_len(),
3403            Sbp::MsgAlmanacGlo(msg) => msg.encoded_len(),
3404            Sbp::MsgGloBiases(msg) => msg.encoded_len(),
3405            Sbp::MsgEphemerisDepD(msg) => msg.encoded_len(),
3406            Sbp::MsgEphemerisGpsDepE(msg) => msg.encoded_len(),
3407            Sbp::MsgEphemerisSbasDepA(msg) => msg.encoded_len(),
3408            Sbp::MsgEphemerisGloDepA(msg) => msg.encoded_len(),
3409            Sbp::MsgEphemerisSbasDepB(msg) => msg.encoded_len(),
3410            Sbp::MsgEphemerisGloDepB(msg) => msg.encoded_len(),
3411            Sbp::MsgEphemerisGpsDepF(msg) => msg.encoded_len(),
3412            Sbp::MsgEphemerisGloDepC(msg) => msg.encoded_len(),
3413            Sbp::MsgEphemerisGloDepD(msg) => msg.encoded_len(),
3414            Sbp::MsgEphemerisBds(msg) => msg.encoded_len(),
3415            Sbp::MsgEphemerisGps(msg) => msg.encoded_len(),
3416            Sbp::MsgEphemerisGlo(msg) => msg.encoded_len(),
3417            Sbp::MsgEphemerisSbas(msg) => msg.encoded_len(),
3418            Sbp::MsgEphemerisGal(msg) => msg.encoded_len(),
3419            Sbp::MsgEphemerisQzss(msg) => msg.encoded_len(),
3420            Sbp::MsgIono(msg) => msg.encoded_len(),
3421            Sbp::MsgSvConfigurationGpsDep(msg) => msg.encoded_len(),
3422            Sbp::MsgGroupDelayDepA(msg) => msg.encoded_len(),
3423            Sbp::MsgGroupDelayDepB(msg) => msg.encoded_len(),
3424            Sbp::MsgGroupDelay(msg) => msg.encoded_len(),
3425            Sbp::MsgEphemerisGalDepA(msg) => msg.encoded_len(),
3426            Sbp::MsgGnssCapb(msg) => msg.encoded_len(),
3427            Sbp::MsgSvAzEl(msg) => msg.encoded_len(),
3428            Sbp::MsgSettingsWrite(msg) => msg.encoded_len(),
3429            Sbp::MsgSettingsSave(msg) => msg.encoded_len(),
3430            Sbp::MsgSettingsReadByIndexReq(msg) => msg.encoded_len(),
3431            Sbp::MsgFileioReadResp(msg) => msg.encoded_len(),
3432            Sbp::MsgSettingsReadReq(msg) => msg.encoded_len(),
3433            Sbp::MsgSettingsReadResp(msg) => msg.encoded_len(),
3434            Sbp::MsgSettingsReadByIndexDone(msg) => msg.encoded_len(),
3435            Sbp::MsgSettingsReadByIndexResp(msg) => msg.encoded_len(),
3436            Sbp::MsgFileioReadReq(msg) => msg.encoded_len(),
3437            Sbp::MsgFileioReadDirReq(msg) => msg.encoded_len(),
3438            Sbp::MsgFileioReadDirResp(msg) => msg.encoded_len(),
3439            Sbp::MsgFileioWriteResp(msg) => msg.encoded_len(),
3440            Sbp::MsgFileioRemove(msg) => msg.encoded_len(),
3441            Sbp::MsgFileioWriteReq(msg) => msg.encoded_len(),
3442            Sbp::MsgSettingsRegister(msg) => msg.encoded_len(),
3443            Sbp::MsgSettingsWriteResp(msg) => msg.encoded_len(),
3444            Sbp::MsgBootloaderHandshakeDepA(msg) => msg.encoded_len(),
3445            Sbp::MsgBootloaderJumpToApp(msg) => msg.encoded_len(),
3446            Sbp::MsgResetDep(msg) => msg.encoded_len(),
3447            Sbp::MsgBootloaderHandshakeReq(msg) => msg.encoded_len(),
3448            Sbp::MsgBootloaderHandshakeResp(msg) => msg.encoded_len(),
3449            Sbp::MsgDeviceMonitor(msg) => msg.encoded_len(),
3450            Sbp::MsgReset(msg) => msg.encoded_len(),
3451            Sbp::MsgCommandReq(msg) => msg.encoded_len(),
3452            Sbp::MsgCommandResp(msg) => msg.encoded_len(),
3453            Sbp::MsgNetworkStateReq(msg) => msg.encoded_len(),
3454            Sbp::MsgNetworkStateResp(msg) => msg.encoded_len(),
3455            Sbp::MsgCommandOutput(msg) => msg.encoded_len(),
3456            Sbp::MsgNetworkBandwidthUsage(msg) => msg.encoded_len(),
3457            Sbp::MsgCellModemStatus(msg) => msg.encoded_len(),
3458            Sbp::MsgFrontEndGain(msg) => msg.encoded_len(),
3459            Sbp::MsgCwResults(msg) => msg.encoded_len(),
3460            Sbp::MsgCwStart(msg) => msg.encoded_len(),
3461            Sbp::MsgNapDeviceDnaResp(msg) => msg.encoded_len(),
3462            Sbp::MsgNapDeviceDnaReq(msg) => msg.encoded_len(),
3463            Sbp::MsgFlashDone(msg) => msg.encoded_len(),
3464            Sbp::MsgFlashReadResp(msg) => msg.encoded_len(),
3465            Sbp::MsgFlashErase(msg) => msg.encoded_len(),
3466            Sbp::MsgStmFlashLockSector(msg) => msg.encoded_len(),
3467            Sbp::MsgStmFlashUnlockSector(msg) => msg.encoded_len(),
3468            Sbp::MsgStmUniqueIdResp(msg) => msg.encoded_len(),
3469            Sbp::MsgFlashProgram(msg) => msg.encoded_len(),
3470            Sbp::MsgFlashReadReq(msg) => msg.encoded_len(),
3471            Sbp::MsgStmUniqueIdReq(msg) => msg.encoded_len(),
3472            Sbp::MsgM25FlashWriteStatus(msg) => msg.encoded_len(),
3473            Sbp::MsgGpsTimeDepA(msg) => msg.encoded_len(),
3474            Sbp::MsgExtEvent(msg) => msg.encoded_len(),
3475            Sbp::MsgGpsTime(msg) => msg.encoded_len(),
3476            Sbp::MsgUtcTime(msg) => msg.encoded_len(),
3477            Sbp::MsgGpsTimeGnss(msg) => msg.encoded_len(),
3478            Sbp::MsgUtcTimeGnss(msg) => msg.encoded_len(),
3479            Sbp::MsgTelSv(msg) => msg.encoded_len(),
3480            Sbp::MsgSettingsRegisterResp(msg) => msg.encoded_len(),
3481            Sbp::MsgPosEcefDepA(msg) => msg.encoded_len(),
3482            Sbp::MsgPosLlhDepA(msg) => msg.encoded_len(),
3483            Sbp::MsgBaselineEcefDepA(msg) => msg.encoded_len(),
3484            Sbp::MsgBaselineNedDepA(msg) => msg.encoded_len(),
3485            Sbp::MsgVelEcefDepA(msg) => msg.encoded_len(),
3486            Sbp::MsgVelNedDepA(msg) => msg.encoded_len(),
3487            Sbp::MsgDopsDepA(msg) => msg.encoded_len(),
3488            Sbp::MsgBaselineHeadingDepA(msg) => msg.encoded_len(),
3489            Sbp::MsgDops(msg) => msg.encoded_len(),
3490            Sbp::MsgPosEcef(msg) => msg.encoded_len(),
3491            Sbp::MsgPosLlh(msg) => msg.encoded_len(),
3492            Sbp::MsgBaselineEcef(msg) => msg.encoded_len(),
3493            Sbp::MsgBaselineNed(msg) => msg.encoded_len(),
3494            Sbp::MsgVelEcef(msg) => msg.encoded_len(),
3495            Sbp::MsgVelNed(msg) => msg.encoded_len(),
3496            Sbp::MsgBaselineHeading(msg) => msg.encoded_len(),
3497            Sbp::MsgAgeCorrections(msg) => msg.encoded_len(),
3498            Sbp::MsgPosLlhCov(msg) => msg.encoded_len(),
3499            Sbp::MsgVelNedCov(msg) => msg.encoded_len(),
3500            Sbp::MsgVelBody(msg) => msg.encoded_len(),
3501            Sbp::MsgPosEcefCov(msg) => msg.encoded_len(),
3502            Sbp::MsgVelEcefCov(msg) => msg.encoded_len(),
3503            Sbp::MsgProtectionLevelDepA(msg) => msg.encoded_len(),
3504            Sbp::MsgProtectionLevel(msg) => msg.encoded_len(),
3505            Sbp::MsgPosLlhAcc(msg) => msg.encoded_len(),
3506            Sbp::MsgVelCog(msg) => msg.encoded_len(),
3507            Sbp::MsgOrientQuat(msg) => msg.encoded_len(),
3508            Sbp::MsgOrientEuler(msg) => msg.encoded_len(),
3509            Sbp::MsgAngularRate(msg) => msg.encoded_len(),
3510            Sbp::MsgPosEcefGnss(msg) => msg.encoded_len(),
3511            Sbp::MsgPosLlhGnss(msg) => msg.encoded_len(),
3512            Sbp::MsgVelEcefGnss(msg) => msg.encoded_len(),
3513            Sbp::MsgVelNedGnss(msg) => msg.encoded_len(),
3514            Sbp::MsgPosLlhCovGnss(msg) => msg.encoded_len(),
3515            Sbp::MsgVelNedCovGnss(msg) => msg.encoded_len(),
3516            Sbp::MsgPosEcefCovGnss(msg) => msg.encoded_len(),
3517            Sbp::MsgVelEcefCovGnss(msg) => msg.encoded_len(),
3518            Sbp::MsgUtcLeapSecond(msg) => msg.encoded_len(),
3519            Sbp::MsgReferenceFrameParam(msg) => msg.encoded_len(),
3520            Sbp::MsgPoseRelative(msg) => msg.encoded_len(),
3521            Sbp::MsgNdbEvent(msg) => msg.encoded_len(),
3522            Sbp::MsgLog(msg) => msg.encoded_len(),
3523            Sbp::MsgFwd(msg) => msg.encoded_len(),
3524            Sbp::MsgSsrOrbitClockDepA(msg) => msg.encoded_len(),
3525            Sbp::MsgSsrOrbitClock(msg) => msg.encoded_len(),
3526            Sbp::MsgSsrOrbitClockBounds(msg) => msg.encoded_len(),
3527            Sbp::MsgSsrOrbitClockBoundsDegradation(msg) => msg.encoded_len(),
3528            Sbp::MsgSsrCodeBiases(msg) => msg.encoded_len(),
3529            Sbp::MsgSsrPhaseBiases(msg) => msg.encoded_len(),
3530            Sbp::MsgSsrStecCorrectionDepA(msg) => msg.encoded_len(),
3531            Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.encoded_len(),
3532            Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.encoded_len(),
3533            Sbp::MsgSsrGridDefinitionDepA(msg) => msg.encoded_len(),
3534            Sbp::MsgSsrTileDefinitionDepA(msg) => msg.encoded_len(),
3535            Sbp::MsgSsrTileDefinitionDepB(msg) => msg.encoded_len(),
3536            Sbp::MsgSsrTileDefinition(msg) => msg.encoded_len(),
3537            Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.encoded_len(),
3538            Sbp::MsgSsrStecCorrectionDep(msg) => msg.encoded_len(),
3539            Sbp::MsgSsrGriddedCorrection(msg) => msg.encoded_len(),
3540            Sbp::MsgSsrStecCorrection(msg) => msg.encoded_len(),
3541            Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.encoded_len(),
3542            Sbp::MsgSsrSatelliteApcDep(msg) => msg.encoded_len(),
3543            Sbp::MsgSsrSatelliteApc(msg) => msg.encoded_len(),
3544            Sbp::MsgOsr(msg) => msg.encoded_len(),
3545            Sbp::MsgUserData(msg) => msg.encoded_len(),
3546            Sbp::MsgImuRaw(msg) => msg.encoded_len(),
3547            Sbp::MsgImuAux(msg) => msg.encoded_len(),
3548            Sbp::MsgMagRaw(msg) => msg.encoded_len(),
3549            Sbp::MsgOdometry(msg) => msg.encoded_len(),
3550            Sbp::MsgWheeltick(msg) => msg.encoded_len(),
3551            Sbp::MsgImuComp(msg) => msg.encoded_len(),
3552            Sbp::MsgSsrFlagHighLevelDepA(msg) => msg.encoded_len(),
3553            Sbp::MsgSsrFlagHighLevel(msg) => msg.encoded_len(),
3554            Sbp::MsgSsrFlagSatellites(msg) => msg.encoded_len(),
3555            Sbp::MsgSsrFlagTropoGridPoints(msg) => msg.encoded_len(),
3556            Sbp::MsgSsrFlagIonoGridPoints(msg) => msg.encoded_len(),
3557            Sbp::MsgSsrFlagIonoTileSatLos(msg) => msg.encoded_len(),
3558            Sbp::MsgSsrFlagIonoGridPointSatLos(msg) => msg.encoded_len(),
3559            Sbp::MsgAcknowledge(msg) => msg.encoded_len(),
3560            Sbp::MsgEd25519SignatureDepA(msg) => msg.encoded_len(),
3561            Sbp::MsgEd25519CertificateDep(msg) => msg.encoded_len(),
3562            Sbp::MsgEd25519SignatureDepB(msg) => msg.encoded_len(),
3563            Sbp::MsgEcdsaCertificate(msg) => msg.encoded_len(),
3564            Sbp::MsgCertificateChainDep(msg) => msg.encoded_len(),
3565            Sbp::MsgEcdsaSignatureDepA(msg) => msg.encoded_len(),
3566            Sbp::MsgEcdsaSignatureDepB(msg) => msg.encoded_len(),
3567            Sbp::MsgEcdsaSignature(msg) => msg.encoded_len(),
3568            Sbp::MsgCertificateChain(msg) => msg.encoded_len(),
3569            Sbp::MsgAesCmacSignature(msg) => msg.encoded_len(),
3570            Sbp::MsgFileioConfigReq(msg) => msg.encoded_len(),
3571            Sbp::MsgFileioConfigResp(msg) => msg.encoded_len(),
3572            Sbp::MsgSbasRaw(msg) => msg.encoded_len(),
3573            Sbp::MsgLinuxCpuStateDepA(msg) => msg.encoded_len(),
3574            Sbp::MsgLinuxMemStateDepA(msg) => msg.encoded_len(),
3575            Sbp::MsgLinuxSysStateDepA(msg) => msg.encoded_len(),
3576            Sbp::MsgLinuxProcessSocketCounts(msg) => msg.encoded_len(),
3577            Sbp::MsgLinuxProcessSocketQueues(msg) => msg.encoded_len(),
3578            Sbp::MsgLinuxSocketUsage(msg) => msg.encoded_len(),
3579            Sbp::MsgLinuxProcessFdCount(msg) => msg.encoded_len(),
3580            Sbp::MsgLinuxProcessFdSummary(msg) => msg.encoded_len(),
3581            Sbp::MsgLinuxCpuState(msg) => msg.encoded_len(),
3582            Sbp::MsgLinuxMemState(msg) => msg.encoded_len(),
3583            Sbp::MsgLinuxSysState(msg) => msg.encoded_len(),
3584            Sbp::MsgMeasurementPoint(msg) => msg.encoded_len(),
3585            Sbp::MsgProfilingSystemInfo(msg) => msg.encoded_len(),
3586            Sbp::MsgProfilingThreadInfo(msg) => msg.encoded_len(),
3587            Sbp::MsgProfilingResourceCounter(msg) => msg.encoded_len(),
3588            Sbp::MsgStartup(msg) => msg.encoded_len(),
3589            Sbp::MsgDgnssStatus(msg) => msg.encoded_len(),
3590            Sbp::MsgInsStatus(msg) => msg.encoded_len(),
3591            Sbp::MsgCsacTelemetry(msg) => msg.encoded_len(),
3592            Sbp::MsgCsacTelemetryLabels(msg) => msg.encoded_len(),
3593            Sbp::MsgInsUpdates(msg) => msg.encoded_len(),
3594            Sbp::MsgGnssTimeOffset(msg) => msg.encoded_len(),
3595            Sbp::MsgPpsTime(msg) => msg.encoded_len(),
3596            Sbp::MsgSensorAidEvent(msg) => msg.encoded_len(),
3597            Sbp::MsgGroupMeta(msg) => msg.encoded_len(),
3598            Sbp::MsgSolnMeta(msg) => msg.encoded_len(),
3599            Sbp::MsgSolnMetaDepA(msg) => msg.encoded_len(),
3600            Sbp::MsgStatusJournal(msg) => msg.encoded_len(),
3601            Sbp::MsgStatusReport(msg) => msg.encoded_len(),
3602            Sbp::MsgHeartbeat(msg) => msg.encoded_len(),
3603            Sbp::Unknown(msg) => msg.encoded_len(),
3604            Sbp::Invalid(msg) => msg.encoded_len(),
3605        }
3606    }
3607
3608    #[cfg(feature = "swiftnav")]
3609    fn gps_time(
3610        &self,
3611    ) -> Option<std::result::Result<crate::time::MessageTime, crate::time::GpsTimeError>> {
3612        match self {
3613            Sbp::MsgPrintDep(msg) => msg.gps_time(),
3614            Sbp::MsgTrackingStateDetailedDep(msg) => msg.gps_time(),
3615            Sbp::MsgTrackingStateDepB(msg) => msg.gps_time(),
3616            Sbp::MsgAcqResultDepB(msg) => msg.gps_time(),
3617            Sbp::MsgAcqResultDepA(msg) => msg.gps_time(),
3618            Sbp::MsgTrackingStateDepA(msg) => msg.gps_time(),
3619            Sbp::MsgThreadState(msg) => msg.gps_time(),
3620            Sbp::MsgUartStateDepa(msg) => msg.gps_time(),
3621            Sbp::MsgIarState(msg) => msg.gps_time(),
3622            Sbp::MsgEphemerisDepA(msg) => msg.gps_time(),
3623            Sbp::MsgMaskSatelliteDep(msg) => msg.gps_time(),
3624            Sbp::MsgTrackingIqDepA(msg) => msg.gps_time(),
3625            Sbp::MsgUartState(msg) => msg.gps_time(),
3626            Sbp::MsgAcqSvProfileDep(msg) => msg.gps_time(),
3627            Sbp::MsgAcqResultDepC(msg) => msg.gps_time(),
3628            Sbp::MsgTrackingStateDetailedDepA(msg) => msg.gps_time(),
3629            Sbp::MsgResetFilters(msg) => msg.gps_time(),
3630            Sbp::MsgInitBaseDep(msg) => msg.gps_time(),
3631            Sbp::MsgMaskSatellite(msg) => msg.gps_time(),
3632            Sbp::MsgTrackingIqDepB(msg) => msg.gps_time(),
3633            Sbp::MsgTrackingIq(msg) => msg.gps_time(),
3634            Sbp::MsgAcqSvProfile(msg) => msg.gps_time(),
3635            Sbp::MsgAcqResult(msg) => msg.gps_time(),
3636            Sbp::MsgTrackingState(msg) => msg.gps_time(),
3637            Sbp::MsgObsDepB(msg) => msg.gps_time(),
3638            Sbp::MsgBasePosLlh(msg) => msg.gps_time(),
3639            Sbp::MsgObsDepA(msg) => msg.gps_time(),
3640            Sbp::MsgEphemerisDepB(msg) => msg.gps_time(),
3641            Sbp::MsgEphemerisDepC(msg) => msg.gps_time(),
3642            Sbp::MsgBasePosEcef(msg) => msg.gps_time(),
3643            Sbp::MsgObsDepC(msg) => msg.gps_time(),
3644            Sbp::MsgObs(msg) => msg.gps_time(),
3645            Sbp::MsgSpecanDep(msg) => msg.gps_time(),
3646            Sbp::MsgSpecan(msg) => msg.gps_time(),
3647            Sbp::MsgMeasurementState(msg) => msg.gps_time(),
3648            Sbp::MsgSetTime(msg) => msg.gps_time(),
3649            Sbp::MsgAlmanac(msg) => msg.gps_time(),
3650            Sbp::MsgAlmanacGpsDep(msg) => msg.gps_time(),
3651            Sbp::MsgAlmanacGloDep(msg) => msg.gps_time(),
3652            Sbp::MsgAlmanacGps(msg) => msg.gps_time(),
3653            Sbp::MsgAlmanacGlo(msg) => msg.gps_time(),
3654            Sbp::MsgGloBiases(msg) => msg.gps_time(),
3655            Sbp::MsgEphemerisDepD(msg) => msg.gps_time(),
3656            Sbp::MsgEphemerisGpsDepE(msg) => msg.gps_time(),
3657            Sbp::MsgEphemerisSbasDepA(msg) => msg.gps_time(),
3658            Sbp::MsgEphemerisGloDepA(msg) => msg.gps_time(),
3659            Sbp::MsgEphemerisSbasDepB(msg) => msg.gps_time(),
3660            Sbp::MsgEphemerisGloDepB(msg) => msg.gps_time(),
3661            Sbp::MsgEphemerisGpsDepF(msg) => msg.gps_time(),
3662            Sbp::MsgEphemerisGloDepC(msg) => msg.gps_time(),
3663            Sbp::MsgEphemerisGloDepD(msg) => msg.gps_time(),
3664            Sbp::MsgEphemerisBds(msg) => msg.gps_time(),
3665            Sbp::MsgEphemerisGps(msg) => msg.gps_time(),
3666            Sbp::MsgEphemerisGlo(msg) => msg.gps_time(),
3667            Sbp::MsgEphemerisSbas(msg) => msg.gps_time(),
3668            Sbp::MsgEphemerisGal(msg) => msg.gps_time(),
3669            Sbp::MsgEphemerisQzss(msg) => msg.gps_time(),
3670            Sbp::MsgIono(msg) => msg.gps_time(),
3671            Sbp::MsgSvConfigurationGpsDep(msg) => msg.gps_time(),
3672            Sbp::MsgGroupDelayDepA(msg) => msg.gps_time(),
3673            Sbp::MsgGroupDelayDepB(msg) => msg.gps_time(),
3674            Sbp::MsgGroupDelay(msg) => msg.gps_time(),
3675            Sbp::MsgEphemerisGalDepA(msg) => msg.gps_time(),
3676            Sbp::MsgGnssCapb(msg) => msg.gps_time(),
3677            Sbp::MsgSvAzEl(msg) => msg.gps_time(),
3678            Sbp::MsgSettingsWrite(msg) => msg.gps_time(),
3679            Sbp::MsgSettingsSave(msg) => msg.gps_time(),
3680            Sbp::MsgSettingsReadByIndexReq(msg) => msg.gps_time(),
3681            Sbp::MsgFileioReadResp(msg) => msg.gps_time(),
3682            Sbp::MsgSettingsReadReq(msg) => msg.gps_time(),
3683            Sbp::MsgSettingsReadResp(msg) => msg.gps_time(),
3684            Sbp::MsgSettingsReadByIndexDone(msg) => msg.gps_time(),
3685            Sbp::MsgSettingsReadByIndexResp(msg) => msg.gps_time(),
3686            Sbp::MsgFileioReadReq(msg) => msg.gps_time(),
3687            Sbp::MsgFileioReadDirReq(msg) => msg.gps_time(),
3688            Sbp::MsgFileioReadDirResp(msg) => msg.gps_time(),
3689            Sbp::MsgFileioWriteResp(msg) => msg.gps_time(),
3690            Sbp::MsgFileioRemove(msg) => msg.gps_time(),
3691            Sbp::MsgFileioWriteReq(msg) => msg.gps_time(),
3692            Sbp::MsgSettingsRegister(msg) => msg.gps_time(),
3693            Sbp::MsgSettingsWriteResp(msg) => msg.gps_time(),
3694            Sbp::MsgBootloaderHandshakeDepA(msg) => msg.gps_time(),
3695            Sbp::MsgBootloaderJumpToApp(msg) => msg.gps_time(),
3696            Sbp::MsgResetDep(msg) => msg.gps_time(),
3697            Sbp::MsgBootloaderHandshakeReq(msg) => msg.gps_time(),
3698            Sbp::MsgBootloaderHandshakeResp(msg) => msg.gps_time(),
3699            Sbp::MsgDeviceMonitor(msg) => msg.gps_time(),
3700            Sbp::MsgReset(msg) => msg.gps_time(),
3701            Sbp::MsgCommandReq(msg) => msg.gps_time(),
3702            Sbp::MsgCommandResp(msg) => msg.gps_time(),
3703            Sbp::MsgNetworkStateReq(msg) => msg.gps_time(),
3704            Sbp::MsgNetworkStateResp(msg) => msg.gps_time(),
3705            Sbp::MsgCommandOutput(msg) => msg.gps_time(),
3706            Sbp::MsgNetworkBandwidthUsage(msg) => msg.gps_time(),
3707            Sbp::MsgCellModemStatus(msg) => msg.gps_time(),
3708            Sbp::MsgFrontEndGain(msg) => msg.gps_time(),
3709            Sbp::MsgCwResults(msg) => msg.gps_time(),
3710            Sbp::MsgCwStart(msg) => msg.gps_time(),
3711            Sbp::MsgNapDeviceDnaResp(msg) => msg.gps_time(),
3712            Sbp::MsgNapDeviceDnaReq(msg) => msg.gps_time(),
3713            Sbp::MsgFlashDone(msg) => msg.gps_time(),
3714            Sbp::MsgFlashReadResp(msg) => msg.gps_time(),
3715            Sbp::MsgFlashErase(msg) => msg.gps_time(),
3716            Sbp::MsgStmFlashLockSector(msg) => msg.gps_time(),
3717            Sbp::MsgStmFlashUnlockSector(msg) => msg.gps_time(),
3718            Sbp::MsgStmUniqueIdResp(msg) => msg.gps_time(),
3719            Sbp::MsgFlashProgram(msg) => msg.gps_time(),
3720            Sbp::MsgFlashReadReq(msg) => msg.gps_time(),
3721            Sbp::MsgStmUniqueIdReq(msg) => msg.gps_time(),
3722            Sbp::MsgM25FlashWriteStatus(msg) => msg.gps_time(),
3723            Sbp::MsgGpsTimeDepA(msg) => msg.gps_time(),
3724            Sbp::MsgExtEvent(msg) => msg.gps_time(),
3725            Sbp::MsgGpsTime(msg) => msg.gps_time(),
3726            Sbp::MsgUtcTime(msg) => msg.gps_time(),
3727            Sbp::MsgGpsTimeGnss(msg) => msg.gps_time(),
3728            Sbp::MsgUtcTimeGnss(msg) => msg.gps_time(),
3729            Sbp::MsgTelSv(msg) => msg.gps_time(),
3730            Sbp::MsgSettingsRegisterResp(msg) => msg.gps_time(),
3731            Sbp::MsgPosEcefDepA(msg) => msg.gps_time(),
3732            Sbp::MsgPosLlhDepA(msg) => msg.gps_time(),
3733            Sbp::MsgBaselineEcefDepA(msg) => msg.gps_time(),
3734            Sbp::MsgBaselineNedDepA(msg) => msg.gps_time(),
3735            Sbp::MsgVelEcefDepA(msg) => msg.gps_time(),
3736            Sbp::MsgVelNedDepA(msg) => msg.gps_time(),
3737            Sbp::MsgDopsDepA(msg) => msg.gps_time(),
3738            Sbp::MsgBaselineHeadingDepA(msg) => msg.gps_time(),
3739            Sbp::MsgDops(msg) => msg.gps_time(),
3740            Sbp::MsgPosEcef(msg) => msg.gps_time(),
3741            Sbp::MsgPosLlh(msg) => msg.gps_time(),
3742            Sbp::MsgBaselineEcef(msg) => msg.gps_time(),
3743            Sbp::MsgBaselineNed(msg) => msg.gps_time(),
3744            Sbp::MsgVelEcef(msg) => msg.gps_time(),
3745            Sbp::MsgVelNed(msg) => msg.gps_time(),
3746            Sbp::MsgBaselineHeading(msg) => msg.gps_time(),
3747            Sbp::MsgAgeCorrections(msg) => msg.gps_time(),
3748            Sbp::MsgPosLlhCov(msg) => msg.gps_time(),
3749            Sbp::MsgVelNedCov(msg) => msg.gps_time(),
3750            Sbp::MsgVelBody(msg) => msg.gps_time(),
3751            Sbp::MsgPosEcefCov(msg) => msg.gps_time(),
3752            Sbp::MsgVelEcefCov(msg) => msg.gps_time(),
3753            Sbp::MsgProtectionLevelDepA(msg) => msg.gps_time(),
3754            Sbp::MsgProtectionLevel(msg) => msg.gps_time(),
3755            Sbp::MsgPosLlhAcc(msg) => msg.gps_time(),
3756            Sbp::MsgVelCog(msg) => msg.gps_time(),
3757            Sbp::MsgOrientQuat(msg) => msg.gps_time(),
3758            Sbp::MsgOrientEuler(msg) => msg.gps_time(),
3759            Sbp::MsgAngularRate(msg) => msg.gps_time(),
3760            Sbp::MsgPosEcefGnss(msg) => msg.gps_time(),
3761            Sbp::MsgPosLlhGnss(msg) => msg.gps_time(),
3762            Sbp::MsgVelEcefGnss(msg) => msg.gps_time(),
3763            Sbp::MsgVelNedGnss(msg) => msg.gps_time(),
3764            Sbp::MsgPosLlhCovGnss(msg) => msg.gps_time(),
3765            Sbp::MsgVelNedCovGnss(msg) => msg.gps_time(),
3766            Sbp::MsgPosEcefCovGnss(msg) => msg.gps_time(),
3767            Sbp::MsgVelEcefCovGnss(msg) => msg.gps_time(),
3768            Sbp::MsgUtcLeapSecond(msg) => msg.gps_time(),
3769            Sbp::MsgReferenceFrameParam(msg) => msg.gps_time(),
3770            Sbp::MsgPoseRelative(msg) => msg.gps_time(),
3771            Sbp::MsgNdbEvent(msg) => msg.gps_time(),
3772            Sbp::MsgLog(msg) => msg.gps_time(),
3773            Sbp::MsgFwd(msg) => msg.gps_time(),
3774            Sbp::MsgSsrOrbitClockDepA(msg) => msg.gps_time(),
3775            Sbp::MsgSsrOrbitClock(msg) => msg.gps_time(),
3776            Sbp::MsgSsrOrbitClockBounds(msg) => msg.gps_time(),
3777            Sbp::MsgSsrOrbitClockBoundsDegradation(msg) => msg.gps_time(),
3778            Sbp::MsgSsrCodeBiases(msg) => msg.gps_time(),
3779            Sbp::MsgSsrPhaseBiases(msg) => msg.gps_time(),
3780            Sbp::MsgSsrStecCorrectionDepA(msg) => msg.gps_time(),
3781            Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.gps_time(),
3782            Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.gps_time(),
3783            Sbp::MsgSsrGridDefinitionDepA(msg) => msg.gps_time(),
3784            Sbp::MsgSsrTileDefinitionDepA(msg) => msg.gps_time(),
3785            Sbp::MsgSsrTileDefinitionDepB(msg) => msg.gps_time(),
3786            Sbp::MsgSsrTileDefinition(msg) => msg.gps_time(),
3787            Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.gps_time(),
3788            Sbp::MsgSsrStecCorrectionDep(msg) => msg.gps_time(),
3789            Sbp::MsgSsrGriddedCorrection(msg) => msg.gps_time(),
3790            Sbp::MsgSsrStecCorrection(msg) => msg.gps_time(),
3791            Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.gps_time(),
3792            Sbp::MsgSsrSatelliteApcDep(msg) => msg.gps_time(),
3793            Sbp::MsgSsrSatelliteApc(msg) => msg.gps_time(),
3794            Sbp::MsgOsr(msg) => msg.gps_time(),
3795            Sbp::MsgUserData(msg) => msg.gps_time(),
3796            Sbp::MsgImuRaw(msg) => msg.gps_time(),
3797            Sbp::MsgImuAux(msg) => msg.gps_time(),
3798            Sbp::MsgMagRaw(msg) => msg.gps_time(),
3799            Sbp::MsgOdometry(msg) => msg.gps_time(),
3800            Sbp::MsgWheeltick(msg) => msg.gps_time(),
3801            Sbp::MsgImuComp(msg) => msg.gps_time(),
3802            Sbp::MsgSsrFlagHighLevelDepA(msg) => msg.gps_time(),
3803            Sbp::MsgSsrFlagHighLevel(msg) => msg.gps_time(),
3804            Sbp::MsgSsrFlagSatellites(msg) => msg.gps_time(),
3805            Sbp::MsgSsrFlagTropoGridPoints(msg) => msg.gps_time(),
3806            Sbp::MsgSsrFlagIonoGridPoints(msg) => msg.gps_time(),
3807            Sbp::MsgSsrFlagIonoTileSatLos(msg) => msg.gps_time(),
3808            Sbp::MsgSsrFlagIonoGridPointSatLos(msg) => msg.gps_time(),
3809            Sbp::MsgAcknowledge(msg) => msg.gps_time(),
3810            Sbp::MsgEd25519SignatureDepA(msg) => msg.gps_time(),
3811            Sbp::MsgEd25519CertificateDep(msg) => msg.gps_time(),
3812            Sbp::MsgEd25519SignatureDepB(msg) => msg.gps_time(),
3813            Sbp::MsgEcdsaCertificate(msg) => msg.gps_time(),
3814            Sbp::MsgCertificateChainDep(msg) => msg.gps_time(),
3815            Sbp::MsgEcdsaSignatureDepA(msg) => msg.gps_time(),
3816            Sbp::MsgEcdsaSignatureDepB(msg) => msg.gps_time(),
3817            Sbp::MsgEcdsaSignature(msg) => msg.gps_time(),
3818            Sbp::MsgCertificateChain(msg) => msg.gps_time(),
3819            Sbp::MsgAesCmacSignature(msg) => msg.gps_time(),
3820            Sbp::MsgFileioConfigReq(msg) => msg.gps_time(),
3821            Sbp::MsgFileioConfigResp(msg) => msg.gps_time(),
3822            Sbp::MsgSbasRaw(msg) => msg.gps_time(),
3823            Sbp::MsgLinuxCpuStateDepA(msg) => msg.gps_time(),
3824            Sbp::MsgLinuxMemStateDepA(msg) => msg.gps_time(),
3825            Sbp::MsgLinuxSysStateDepA(msg) => msg.gps_time(),
3826            Sbp::MsgLinuxProcessSocketCounts(msg) => msg.gps_time(),
3827            Sbp::MsgLinuxProcessSocketQueues(msg) => msg.gps_time(),
3828            Sbp::MsgLinuxSocketUsage(msg) => msg.gps_time(),
3829            Sbp::MsgLinuxProcessFdCount(msg) => msg.gps_time(),
3830            Sbp::MsgLinuxProcessFdSummary(msg) => msg.gps_time(),
3831            Sbp::MsgLinuxCpuState(msg) => msg.gps_time(),
3832            Sbp::MsgLinuxMemState(msg) => msg.gps_time(),
3833            Sbp::MsgLinuxSysState(msg) => msg.gps_time(),
3834            Sbp::MsgMeasurementPoint(msg) => msg.gps_time(),
3835            Sbp::MsgProfilingSystemInfo(msg) => msg.gps_time(),
3836            Sbp::MsgProfilingThreadInfo(msg) => msg.gps_time(),
3837            Sbp::MsgProfilingResourceCounter(msg) => msg.gps_time(),
3838            Sbp::MsgStartup(msg) => msg.gps_time(),
3839            Sbp::MsgDgnssStatus(msg) => msg.gps_time(),
3840            Sbp::MsgInsStatus(msg) => msg.gps_time(),
3841            Sbp::MsgCsacTelemetry(msg) => msg.gps_time(),
3842            Sbp::MsgCsacTelemetryLabels(msg) => msg.gps_time(),
3843            Sbp::MsgInsUpdates(msg) => msg.gps_time(),
3844            Sbp::MsgGnssTimeOffset(msg) => msg.gps_time(),
3845            Sbp::MsgPpsTime(msg) => msg.gps_time(),
3846            Sbp::MsgSensorAidEvent(msg) => msg.gps_time(),
3847            Sbp::MsgGroupMeta(msg) => msg.gps_time(),
3848            Sbp::MsgSolnMeta(msg) => msg.gps_time(),
3849            Sbp::MsgSolnMetaDepA(msg) => msg.gps_time(),
3850            Sbp::MsgStatusJournal(msg) => msg.gps_time(),
3851            Sbp::MsgStatusReport(msg) => msg.gps_time(),
3852            Sbp::MsgHeartbeat(msg) => msg.gps_time(),
3853            Sbp::Unknown(msg) => msg.gps_time(),
3854            Sbp::Invalid(msg) => msg.gps_time(),
3855        }
3856    }
3857
3858    fn friendly_name(&self) -> &'static str {
3859        match self {
3860            Sbp::MsgPrintDep(msg) => msg.friendly_name(),
3861            Sbp::MsgTrackingStateDetailedDep(msg) => msg.friendly_name(),
3862            Sbp::MsgTrackingStateDepB(msg) => msg.friendly_name(),
3863            Sbp::MsgAcqResultDepB(msg) => msg.friendly_name(),
3864            Sbp::MsgAcqResultDepA(msg) => msg.friendly_name(),
3865            Sbp::MsgTrackingStateDepA(msg) => msg.friendly_name(),
3866            Sbp::MsgThreadState(msg) => msg.friendly_name(),
3867            Sbp::MsgUartStateDepa(msg) => msg.friendly_name(),
3868            Sbp::MsgIarState(msg) => msg.friendly_name(),
3869            Sbp::MsgEphemerisDepA(msg) => msg.friendly_name(),
3870            Sbp::MsgMaskSatelliteDep(msg) => msg.friendly_name(),
3871            Sbp::MsgTrackingIqDepA(msg) => msg.friendly_name(),
3872            Sbp::MsgUartState(msg) => msg.friendly_name(),
3873            Sbp::MsgAcqSvProfileDep(msg) => msg.friendly_name(),
3874            Sbp::MsgAcqResultDepC(msg) => msg.friendly_name(),
3875            Sbp::MsgTrackingStateDetailedDepA(msg) => msg.friendly_name(),
3876            Sbp::MsgResetFilters(msg) => msg.friendly_name(),
3877            Sbp::MsgInitBaseDep(msg) => msg.friendly_name(),
3878            Sbp::MsgMaskSatellite(msg) => msg.friendly_name(),
3879            Sbp::MsgTrackingIqDepB(msg) => msg.friendly_name(),
3880            Sbp::MsgTrackingIq(msg) => msg.friendly_name(),
3881            Sbp::MsgAcqSvProfile(msg) => msg.friendly_name(),
3882            Sbp::MsgAcqResult(msg) => msg.friendly_name(),
3883            Sbp::MsgTrackingState(msg) => msg.friendly_name(),
3884            Sbp::MsgObsDepB(msg) => msg.friendly_name(),
3885            Sbp::MsgBasePosLlh(msg) => msg.friendly_name(),
3886            Sbp::MsgObsDepA(msg) => msg.friendly_name(),
3887            Sbp::MsgEphemerisDepB(msg) => msg.friendly_name(),
3888            Sbp::MsgEphemerisDepC(msg) => msg.friendly_name(),
3889            Sbp::MsgBasePosEcef(msg) => msg.friendly_name(),
3890            Sbp::MsgObsDepC(msg) => msg.friendly_name(),
3891            Sbp::MsgObs(msg) => msg.friendly_name(),
3892            Sbp::MsgSpecanDep(msg) => msg.friendly_name(),
3893            Sbp::MsgSpecan(msg) => msg.friendly_name(),
3894            Sbp::MsgMeasurementState(msg) => msg.friendly_name(),
3895            Sbp::MsgSetTime(msg) => msg.friendly_name(),
3896            Sbp::MsgAlmanac(msg) => msg.friendly_name(),
3897            Sbp::MsgAlmanacGpsDep(msg) => msg.friendly_name(),
3898            Sbp::MsgAlmanacGloDep(msg) => msg.friendly_name(),
3899            Sbp::MsgAlmanacGps(msg) => msg.friendly_name(),
3900            Sbp::MsgAlmanacGlo(msg) => msg.friendly_name(),
3901            Sbp::MsgGloBiases(msg) => msg.friendly_name(),
3902            Sbp::MsgEphemerisDepD(msg) => msg.friendly_name(),
3903            Sbp::MsgEphemerisGpsDepE(msg) => msg.friendly_name(),
3904            Sbp::MsgEphemerisSbasDepA(msg) => msg.friendly_name(),
3905            Sbp::MsgEphemerisGloDepA(msg) => msg.friendly_name(),
3906            Sbp::MsgEphemerisSbasDepB(msg) => msg.friendly_name(),
3907            Sbp::MsgEphemerisGloDepB(msg) => msg.friendly_name(),
3908            Sbp::MsgEphemerisGpsDepF(msg) => msg.friendly_name(),
3909            Sbp::MsgEphemerisGloDepC(msg) => msg.friendly_name(),
3910            Sbp::MsgEphemerisGloDepD(msg) => msg.friendly_name(),
3911            Sbp::MsgEphemerisBds(msg) => msg.friendly_name(),
3912            Sbp::MsgEphemerisGps(msg) => msg.friendly_name(),
3913            Sbp::MsgEphemerisGlo(msg) => msg.friendly_name(),
3914            Sbp::MsgEphemerisSbas(msg) => msg.friendly_name(),
3915            Sbp::MsgEphemerisGal(msg) => msg.friendly_name(),
3916            Sbp::MsgEphemerisQzss(msg) => msg.friendly_name(),
3917            Sbp::MsgIono(msg) => msg.friendly_name(),
3918            Sbp::MsgSvConfigurationGpsDep(msg) => msg.friendly_name(),
3919            Sbp::MsgGroupDelayDepA(msg) => msg.friendly_name(),
3920            Sbp::MsgGroupDelayDepB(msg) => msg.friendly_name(),
3921            Sbp::MsgGroupDelay(msg) => msg.friendly_name(),
3922            Sbp::MsgEphemerisGalDepA(msg) => msg.friendly_name(),
3923            Sbp::MsgGnssCapb(msg) => msg.friendly_name(),
3924            Sbp::MsgSvAzEl(msg) => msg.friendly_name(),
3925            Sbp::MsgSettingsWrite(msg) => msg.friendly_name(),
3926            Sbp::MsgSettingsSave(msg) => msg.friendly_name(),
3927            Sbp::MsgSettingsReadByIndexReq(msg) => msg.friendly_name(),
3928            Sbp::MsgFileioReadResp(msg) => msg.friendly_name(),
3929            Sbp::MsgSettingsReadReq(msg) => msg.friendly_name(),
3930            Sbp::MsgSettingsReadResp(msg) => msg.friendly_name(),
3931            Sbp::MsgSettingsReadByIndexDone(msg) => msg.friendly_name(),
3932            Sbp::MsgSettingsReadByIndexResp(msg) => msg.friendly_name(),
3933            Sbp::MsgFileioReadReq(msg) => msg.friendly_name(),
3934            Sbp::MsgFileioReadDirReq(msg) => msg.friendly_name(),
3935            Sbp::MsgFileioReadDirResp(msg) => msg.friendly_name(),
3936            Sbp::MsgFileioWriteResp(msg) => msg.friendly_name(),
3937            Sbp::MsgFileioRemove(msg) => msg.friendly_name(),
3938            Sbp::MsgFileioWriteReq(msg) => msg.friendly_name(),
3939            Sbp::MsgSettingsRegister(msg) => msg.friendly_name(),
3940            Sbp::MsgSettingsWriteResp(msg) => msg.friendly_name(),
3941            Sbp::MsgBootloaderHandshakeDepA(msg) => msg.friendly_name(),
3942            Sbp::MsgBootloaderJumpToApp(msg) => msg.friendly_name(),
3943            Sbp::MsgResetDep(msg) => msg.friendly_name(),
3944            Sbp::MsgBootloaderHandshakeReq(msg) => msg.friendly_name(),
3945            Sbp::MsgBootloaderHandshakeResp(msg) => msg.friendly_name(),
3946            Sbp::MsgDeviceMonitor(msg) => msg.friendly_name(),
3947            Sbp::MsgReset(msg) => msg.friendly_name(),
3948            Sbp::MsgCommandReq(msg) => msg.friendly_name(),
3949            Sbp::MsgCommandResp(msg) => msg.friendly_name(),
3950            Sbp::MsgNetworkStateReq(msg) => msg.friendly_name(),
3951            Sbp::MsgNetworkStateResp(msg) => msg.friendly_name(),
3952            Sbp::MsgCommandOutput(msg) => msg.friendly_name(),
3953            Sbp::MsgNetworkBandwidthUsage(msg) => msg.friendly_name(),
3954            Sbp::MsgCellModemStatus(msg) => msg.friendly_name(),
3955            Sbp::MsgFrontEndGain(msg) => msg.friendly_name(),
3956            Sbp::MsgCwResults(msg) => msg.friendly_name(),
3957            Sbp::MsgCwStart(msg) => msg.friendly_name(),
3958            Sbp::MsgNapDeviceDnaResp(msg) => msg.friendly_name(),
3959            Sbp::MsgNapDeviceDnaReq(msg) => msg.friendly_name(),
3960            Sbp::MsgFlashDone(msg) => msg.friendly_name(),
3961            Sbp::MsgFlashReadResp(msg) => msg.friendly_name(),
3962            Sbp::MsgFlashErase(msg) => msg.friendly_name(),
3963            Sbp::MsgStmFlashLockSector(msg) => msg.friendly_name(),
3964            Sbp::MsgStmFlashUnlockSector(msg) => msg.friendly_name(),
3965            Sbp::MsgStmUniqueIdResp(msg) => msg.friendly_name(),
3966            Sbp::MsgFlashProgram(msg) => msg.friendly_name(),
3967            Sbp::MsgFlashReadReq(msg) => msg.friendly_name(),
3968            Sbp::MsgStmUniqueIdReq(msg) => msg.friendly_name(),
3969            Sbp::MsgM25FlashWriteStatus(msg) => msg.friendly_name(),
3970            Sbp::MsgGpsTimeDepA(msg) => msg.friendly_name(),
3971            Sbp::MsgExtEvent(msg) => msg.friendly_name(),
3972            Sbp::MsgGpsTime(msg) => msg.friendly_name(),
3973            Sbp::MsgUtcTime(msg) => msg.friendly_name(),
3974            Sbp::MsgGpsTimeGnss(msg) => msg.friendly_name(),
3975            Sbp::MsgUtcTimeGnss(msg) => msg.friendly_name(),
3976            Sbp::MsgTelSv(msg) => msg.friendly_name(),
3977            Sbp::MsgSettingsRegisterResp(msg) => msg.friendly_name(),
3978            Sbp::MsgPosEcefDepA(msg) => msg.friendly_name(),
3979            Sbp::MsgPosLlhDepA(msg) => msg.friendly_name(),
3980            Sbp::MsgBaselineEcefDepA(msg) => msg.friendly_name(),
3981            Sbp::MsgBaselineNedDepA(msg) => msg.friendly_name(),
3982            Sbp::MsgVelEcefDepA(msg) => msg.friendly_name(),
3983            Sbp::MsgVelNedDepA(msg) => msg.friendly_name(),
3984            Sbp::MsgDopsDepA(msg) => msg.friendly_name(),
3985            Sbp::MsgBaselineHeadingDepA(msg) => msg.friendly_name(),
3986            Sbp::MsgDops(msg) => msg.friendly_name(),
3987            Sbp::MsgPosEcef(msg) => msg.friendly_name(),
3988            Sbp::MsgPosLlh(msg) => msg.friendly_name(),
3989            Sbp::MsgBaselineEcef(msg) => msg.friendly_name(),
3990            Sbp::MsgBaselineNed(msg) => msg.friendly_name(),
3991            Sbp::MsgVelEcef(msg) => msg.friendly_name(),
3992            Sbp::MsgVelNed(msg) => msg.friendly_name(),
3993            Sbp::MsgBaselineHeading(msg) => msg.friendly_name(),
3994            Sbp::MsgAgeCorrections(msg) => msg.friendly_name(),
3995            Sbp::MsgPosLlhCov(msg) => msg.friendly_name(),
3996            Sbp::MsgVelNedCov(msg) => msg.friendly_name(),
3997            Sbp::MsgVelBody(msg) => msg.friendly_name(),
3998            Sbp::MsgPosEcefCov(msg) => msg.friendly_name(),
3999            Sbp::MsgVelEcefCov(msg) => msg.friendly_name(),
4000            Sbp::MsgProtectionLevelDepA(msg) => msg.friendly_name(),
4001            Sbp::MsgProtectionLevel(msg) => msg.friendly_name(),
4002            Sbp::MsgPosLlhAcc(msg) => msg.friendly_name(),
4003            Sbp::MsgVelCog(msg) => msg.friendly_name(),
4004            Sbp::MsgOrientQuat(msg) => msg.friendly_name(),
4005            Sbp::MsgOrientEuler(msg) => msg.friendly_name(),
4006            Sbp::MsgAngularRate(msg) => msg.friendly_name(),
4007            Sbp::MsgPosEcefGnss(msg) => msg.friendly_name(),
4008            Sbp::MsgPosLlhGnss(msg) => msg.friendly_name(),
4009            Sbp::MsgVelEcefGnss(msg) => msg.friendly_name(),
4010            Sbp::MsgVelNedGnss(msg) => msg.friendly_name(),
4011            Sbp::MsgPosLlhCovGnss(msg) => msg.friendly_name(),
4012            Sbp::MsgVelNedCovGnss(msg) => msg.friendly_name(),
4013            Sbp::MsgPosEcefCovGnss(msg) => msg.friendly_name(),
4014            Sbp::MsgVelEcefCovGnss(msg) => msg.friendly_name(),
4015            Sbp::MsgUtcLeapSecond(msg) => msg.friendly_name(),
4016            Sbp::MsgReferenceFrameParam(msg) => msg.friendly_name(),
4017            Sbp::MsgPoseRelative(msg) => msg.friendly_name(),
4018            Sbp::MsgNdbEvent(msg) => msg.friendly_name(),
4019            Sbp::MsgLog(msg) => msg.friendly_name(),
4020            Sbp::MsgFwd(msg) => msg.friendly_name(),
4021            Sbp::MsgSsrOrbitClockDepA(msg) => msg.friendly_name(),
4022            Sbp::MsgSsrOrbitClock(msg) => msg.friendly_name(),
4023            Sbp::MsgSsrOrbitClockBounds(msg) => msg.friendly_name(),
4024            Sbp::MsgSsrOrbitClockBoundsDegradation(msg) => msg.friendly_name(),
4025            Sbp::MsgSsrCodeBiases(msg) => msg.friendly_name(),
4026            Sbp::MsgSsrPhaseBiases(msg) => msg.friendly_name(),
4027            Sbp::MsgSsrStecCorrectionDepA(msg) => msg.friendly_name(),
4028            Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.friendly_name(),
4029            Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.friendly_name(),
4030            Sbp::MsgSsrGridDefinitionDepA(msg) => msg.friendly_name(),
4031            Sbp::MsgSsrTileDefinitionDepA(msg) => msg.friendly_name(),
4032            Sbp::MsgSsrTileDefinitionDepB(msg) => msg.friendly_name(),
4033            Sbp::MsgSsrTileDefinition(msg) => msg.friendly_name(),
4034            Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.friendly_name(),
4035            Sbp::MsgSsrStecCorrectionDep(msg) => msg.friendly_name(),
4036            Sbp::MsgSsrGriddedCorrection(msg) => msg.friendly_name(),
4037            Sbp::MsgSsrStecCorrection(msg) => msg.friendly_name(),
4038            Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.friendly_name(),
4039            Sbp::MsgSsrSatelliteApcDep(msg) => msg.friendly_name(),
4040            Sbp::MsgSsrSatelliteApc(msg) => msg.friendly_name(),
4041            Sbp::MsgOsr(msg) => msg.friendly_name(),
4042            Sbp::MsgUserData(msg) => msg.friendly_name(),
4043            Sbp::MsgImuRaw(msg) => msg.friendly_name(),
4044            Sbp::MsgImuAux(msg) => msg.friendly_name(),
4045            Sbp::MsgMagRaw(msg) => msg.friendly_name(),
4046            Sbp::MsgOdometry(msg) => msg.friendly_name(),
4047            Sbp::MsgWheeltick(msg) => msg.friendly_name(),
4048            Sbp::MsgImuComp(msg) => msg.friendly_name(),
4049            Sbp::MsgSsrFlagHighLevelDepA(msg) => msg.friendly_name(),
4050            Sbp::MsgSsrFlagHighLevel(msg) => msg.friendly_name(),
4051            Sbp::MsgSsrFlagSatellites(msg) => msg.friendly_name(),
4052            Sbp::MsgSsrFlagTropoGridPoints(msg) => msg.friendly_name(),
4053            Sbp::MsgSsrFlagIonoGridPoints(msg) => msg.friendly_name(),
4054            Sbp::MsgSsrFlagIonoTileSatLos(msg) => msg.friendly_name(),
4055            Sbp::MsgSsrFlagIonoGridPointSatLos(msg) => msg.friendly_name(),
4056            Sbp::MsgAcknowledge(msg) => msg.friendly_name(),
4057            Sbp::MsgEd25519SignatureDepA(msg) => msg.friendly_name(),
4058            Sbp::MsgEd25519CertificateDep(msg) => msg.friendly_name(),
4059            Sbp::MsgEd25519SignatureDepB(msg) => msg.friendly_name(),
4060            Sbp::MsgEcdsaCertificate(msg) => msg.friendly_name(),
4061            Sbp::MsgCertificateChainDep(msg) => msg.friendly_name(),
4062            Sbp::MsgEcdsaSignatureDepA(msg) => msg.friendly_name(),
4063            Sbp::MsgEcdsaSignatureDepB(msg) => msg.friendly_name(),
4064            Sbp::MsgEcdsaSignature(msg) => msg.friendly_name(),
4065            Sbp::MsgCertificateChain(msg) => msg.friendly_name(),
4066            Sbp::MsgAesCmacSignature(msg) => msg.friendly_name(),
4067            Sbp::MsgFileioConfigReq(msg) => msg.friendly_name(),
4068            Sbp::MsgFileioConfigResp(msg) => msg.friendly_name(),
4069            Sbp::MsgSbasRaw(msg) => msg.friendly_name(),
4070            Sbp::MsgLinuxCpuStateDepA(msg) => msg.friendly_name(),
4071            Sbp::MsgLinuxMemStateDepA(msg) => msg.friendly_name(),
4072            Sbp::MsgLinuxSysStateDepA(msg) => msg.friendly_name(),
4073            Sbp::MsgLinuxProcessSocketCounts(msg) => msg.friendly_name(),
4074            Sbp::MsgLinuxProcessSocketQueues(msg) => msg.friendly_name(),
4075            Sbp::MsgLinuxSocketUsage(msg) => msg.friendly_name(),
4076            Sbp::MsgLinuxProcessFdCount(msg) => msg.friendly_name(),
4077            Sbp::MsgLinuxProcessFdSummary(msg) => msg.friendly_name(),
4078            Sbp::MsgLinuxCpuState(msg) => msg.friendly_name(),
4079            Sbp::MsgLinuxMemState(msg) => msg.friendly_name(),
4080            Sbp::MsgLinuxSysState(msg) => msg.friendly_name(),
4081            Sbp::MsgMeasurementPoint(msg) => msg.friendly_name(),
4082            Sbp::MsgProfilingSystemInfo(msg) => msg.friendly_name(),
4083            Sbp::MsgProfilingThreadInfo(msg) => msg.friendly_name(),
4084            Sbp::MsgProfilingResourceCounter(msg) => msg.friendly_name(),
4085            Sbp::MsgStartup(msg) => msg.friendly_name(),
4086            Sbp::MsgDgnssStatus(msg) => msg.friendly_name(),
4087            Sbp::MsgInsStatus(msg) => msg.friendly_name(),
4088            Sbp::MsgCsacTelemetry(msg) => msg.friendly_name(),
4089            Sbp::MsgCsacTelemetryLabels(msg) => msg.friendly_name(),
4090            Sbp::MsgInsUpdates(msg) => msg.friendly_name(),
4091            Sbp::MsgGnssTimeOffset(msg) => msg.friendly_name(),
4092            Sbp::MsgPpsTime(msg) => msg.friendly_name(),
4093            Sbp::MsgSensorAidEvent(msg) => msg.friendly_name(),
4094            Sbp::MsgGroupMeta(msg) => msg.friendly_name(),
4095            Sbp::MsgSolnMeta(msg) => msg.friendly_name(),
4096            Sbp::MsgSolnMetaDepA(msg) => msg.friendly_name(),
4097            Sbp::MsgStatusJournal(msg) => msg.friendly_name(),
4098            Sbp::MsgStatusReport(msg) => msg.friendly_name(),
4099            Sbp::MsgHeartbeat(msg) => msg.friendly_name(),
4100            Sbp::Unknown(msg) => msg.friendly_name(),
4101            Sbp::Invalid(msg) => msg.friendly_name(),
4102        }
4103    }
4104
4105    fn is_valid(&self) -> bool {
4106        match self {
4107            Sbp::MsgPrintDep(msg) => msg.is_valid(),
4108            Sbp::MsgTrackingStateDetailedDep(msg) => msg.is_valid(),
4109            Sbp::MsgTrackingStateDepB(msg) => msg.is_valid(),
4110            Sbp::MsgAcqResultDepB(msg) => msg.is_valid(),
4111            Sbp::MsgAcqResultDepA(msg) => msg.is_valid(),
4112            Sbp::MsgTrackingStateDepA(msg) => msg.is_valid(),
4113            Sbp::MsgThreadState(msg) => msg.is_valid(),
4114            Sbp::MsgUartStateDepa(msg) => msg.is_valid(),
4115            Sbp::MsgIarState(msg) => msg.is_valid(),
4116            Sbp::MsgEphemerisDepA(msg) => msg.is_valid(),
4117            Sbp::MsgMaskSatelliteDep(msg) => msg.is_valid(),
4118            Sbp::MsgTrackingIqDepA(msg) => msg.is_valid(),
4119            Sbp::MsgUartState(msg) => msg.is_valid(),
4120            Sbp::MsgAcqSvProfileDep(msg) => msg.is_valid(),
4121            Sbp::MsgAcqResultDepC(msg) => msg.is_valid(),
4122            Sbp::MsgTrackingStateDetailedDepA(msg) => msg.is_valid(),
4123            Sbp::MsgResetFilters(msg) => msg.is_valid(),
4124            Sbp::MsgInitBaseDep(msg) => msg.is_valid(),
4125            Sbp::MsgMaskSatellite(msg) => msg.is_valid(),
4126            Sbp::MsgTrackingIqDepB(msg) => msg.is_valid(),
4127            Sbp::MsgTrackingIq(msg) => msg.is_valid(),
4128            Sbp::MsgAcqSvProfile(msg) => msg.is_valid(),
4129            Sbp::MsgAcqResult(msg) => msg.is_valid(),
4130            Sbp::MsgTrackingState(msg) => msg.is_valid(),
4131            Sbp::MsgObsDepB(msg) => msg.is_valid(),
4132            Sbp::MsgBasePosLlh(msg) => msg.is_valid(),
4133            Sbp::MsgObsDepA(msg) => msg.is_valid(),
4134            Sbp::MsgEphemerisDepB(msg) => msg.is_valid(),
4135            Sbp::MsgEphemerisDepC(msg) => msg.is_valid(),
4136            Sbp::MsgBasePosEcef(msg) => msg.is_valid(),
4137            Sbp::MsgObsDepC(msg) => msg.is_valid(),
4138            Sbp::MsgObs(msg) => msg.is_valid(),
4139            Sbp::MsgSpecanDep(msg) => msg.is_valid(),
4140            Sbp::MsgSpecan(msg) => msg.is_valid(),
4141            Sbp::MsgMeasurementState(msg) => msg.is_valid(),
4142            Sbp::MsgSetTime(msg) => msg.is_valid(),
4143            Sbp::MsgAlmanac(msg) => msg.is_valid(),
4144            Sbp::MsgAlmanacGpsDep(msg) => msg.is_valid(),
4145            Sbp::MsgAlmanacGloDep(msg) => msg.is_valid(),
4146            Sbp::MsgAlmanacGps(msg) => msg.is_valid(),
4147            Sbp::MsgAlmanacGlo(msg) => msg.is_valid(),
4148            Sbp::MsgGloBiases(msg) => msg.is_valid(),
4149            Sbp::MsgEphemerisDepD(msg) => msg.is_valid(),
4150            Sbp::MsgEphemerisGpsDepE(msg) => msg.is_valid(),
4151            Sbp::MsgEphemerisSbasDepA(msg) => msg.is_valid(),
4152            Sbp::MsgEphemerisGloDepA(msg) => msg.is_valid(),
4153            Sbp::MsgEphemerisSbasDepB(msg) => msg.is_valid(),
4154            Sbp::MsgEphemerisGloDepB(msg) => msg.is_valid(),
4155            Sbp::MsgEphemerisGpsDepF(msg) => msg.is_valid(),
4156            Sbp::MsgEphemerisGloDepC(msg) => msg.is_valid(),
4157            Sbp::MsgEphemerisGloDepD(msg) => msg.is_valid(),
4158            Sbp::MsgEphemerisBds(msg) => msg.is_valid(),
4159            Sbp::MsgEphemerisGps(msg) => msg.is_valid(),
4160            Sbp::MsgEphemerisGlo(msg) => msg.is_valid(),
4161            Sbp::MsgEphemerisSbas(msg) => msg.is_valid(),
4162            Sbp::MsgEphemerisGal(msg) => msg.is_valid(),
4163            Sbp::MsgEphemerisQzss(msg) => msg.is_valid(),
4164            Sbp::MsgIono(msg) => msg.is_valid(),
4165            Sbp::MsgSvConfigurationGpsDep(msg) => msg.is_valid(),
4166            Sbp::MsgGroupDelayDepA(msg) => msg.is_valid(),
4167            Sbp::MsgGroupDelayDepB(msg) => msg.is_valid(),
4168            Sbp::MsgGroupDelay(msg) => msg.is_valid(),
4169            Sbp::MsgEphemerisGalDepA(msg) => msg.is_valid(),
4170            Sbp::MsgGnssCapb(msg) => msg.is_valid(),
4171            Sbp::MsgSvAzEl(msg) => msg.is_valid(),
4172            Sbp::MsgSettingsWrite(msg) => msg.is_valid(),
4173            Sbp::MsgSettingsSave(msg) => msg.is_valid(),
4174            Sbp::MsgSettingsReadByIndexReq(msg) => msg.is_valid(),
4175            Sbp::MsgFileioReadResp(msg) => msg.is_valid(),
4176            Sbp::MsgSettingsReadReq(msg) => msg.is_valid(),
4177            Sbp::MsgSettingsReadResp(msg) => msg.is_valid(),
4178            Sbp::MsgSettingsReadByIndexDone(msg) => msg.is_valid(),
4179            Sbp::MsgSettingsReadByIndexResp(msg) => msg.is_valid(),
4180            Sbp::MsgFileioReadReq(msg) => msg.is_valid(),
4181            Sbp::MsgFileioReadDirReq(msg) => msg.is_valid(),
4182            Sbp::MsgFileioReadDirResp(msg) => msg.is_valid(),
4183            Sbp::MsgFileioWriteResp(msg) => msg.is_valid(),
4184            Sbp::MsgFileioRemove(msg) => msg.is_valid(),
4185            Sbp::MsgFileioWriteReq(msg) => msg.is_valid(),
4186            Sbp::MsgSettingsRegister(msg) => msg.is_valid(),
4187            Sbp::MsgSettingsWriteResp(msg) => msg.is_valid(),
4188            Sbp::MsgBootloaderHandshakeDepA(msg) => msg.is_valid(),
4189            Sbp::MsgBootloaderJumpToApp(msg) => msg.is_valid(),
4190            Sbp::MsgResetDep(msg) => msg.is_valid(),
4191            Sbp::MsgBootloaderHandshakeReq(msg) => msg.is_valid(),
4192            Sbp::MsgBootloaderHandshakeResp(msg) => msg.is_valid(),
4193            Sbp::MsgDeviceMonitor(msg) => msg.is_valid(),
4194            Sbp::MsgReset(msg) => msg.is_valid(),
4195            Sbp::MsgCommandReq(msg) => msg.is_valid(),
4196            Sbp::MsgCommandResp(msg) => msg.is_valid(),
4197            Sbp::MsgNetworkStateReq(msg) => msg.is_valid(),
4198            Sbp::MsgNetworkStateResp(msg) => msg.is_valid(),
4199            Sbp::MsgCommandOutput(msg) => msg.is_valid(),
4200            Sbp::MsgNetworkBandwidthUsage(msg) => msg.is_valid(),
4201            Sbp::MsgCellModemStatus(msg) => msg.is_valid(),
4202            Sbp::MsgFrontEndGain(msg) => msg.is_valid(),
4203            Sbp::MsgCwResults(msg) => msg.is_valid(),
4204            Sbp::MsgCwStart(msg) => msg.is_valid(),
4205            Sbp::MsgNapDeviceDnaResp(msg) => msg.is_valid(),
4206            Sbp::MsgNapDeviceDnaReq(msg) => msg.is_valid(),
4207            Sbp::MsgFlashDone(msg) => msg.is_valid(),
4208            Sbp::MsgFlashReadResp(msg) => msg.is_valid(),
4209            Sbp::MsgFlashErase(msg) => msg.is_valid(),
4210            Sbp::MsgStmFlashLockSector(msg) => msg.is_valid(),
4211            Sbp::MsgStmFlashUnlockSector(msg) => msg.is_valid(),
4212            Sbp::MsgStmUniqueIdResp(msg) => msg.is_valid(),
4213            Sbp::MsgFlashProgram(msg) => msg.is_valid(),
4214            Sbp::MsgFlashReadReq(msg) => msg.is_valid(),
4215            Sbp::MsgStmUniqueIdReq(msg) => msg.is_valid(),
4216            Sbp::MsgM25FlashWriteStatus(msg) => msg.is_valid(),
4217            Sbp::MsgGpsTimeDepA(msg) => msg.is_valid(),
4218            Sbp::MsgExtEvent(msg) => msg.is_valid(),
4219            Sbp::MsgGpsTime(msg) => msg.is_valid(),
4220            Sbp::MsgUtcTime(msg) => msg.is_valid(),
4221            Sbp::MsgGpsTimeGnss(msg) => msg.is_valid(),
4222            Sbp::MsgUtcTimeGnss(msg) => msg.is_valid(),
4223            Sbp::MsgTelSv(msg) => msg.is_valid(),
4224            Sbp::MsgSettingsRegisterResp(msg) => msg.is_valid(),
4225            Sbp::MsgPosEcefDepA(msg) => msg.is_valid(),
4226            Sbp::MsgPosLlhDepA(msg) => msg.is_valid(),
4227            Sbp::MsgBaselineEcefDepA(msg) => msg.is_valid(),
4228            Sbp::MsgBaselineNedDepA(msg) => msg.is_valid(),
4229            Sbp::MsgVelEcefDepA(msg) => msg.is_valid(),
4230            Sbp::MsgVelNedDepA(msg) => msg.is_valid(),
4231            Sbp::MsgDopsDepA(msg) => msg.is_valid(),
4232            Sbp::MsgBaselineHeadingDepA(msg) => msg.is_valid(),
4233            Sbp::MsgDops(msg) => msg.is_valid(),
4234            Sbp::MsgPosEcef(msg) => msg.is_valid(),
4235            Sbp::MsgPosLlh(msg) => msg.is_valid(),
4236            Sbp::MsgBaselineEcef(msg) => msg.is_valid(),
4237            Sbp::MsgBaselineNed(msg) => msg.is_valid(),
4238            Sbp::MsgVelEcef(msg) => msg.is_valid(),
4239            Sbp::MsgVelNed(msg) => msg.is_valid(),
4240            Sbp::MsgBaselineHeading(msg) => msg.is_valid(),
4241            Sbp::MsgAgeCorrections(msg) => msg.is_valid(),
4242            Sbp::MsgPosLlhCov(msg) => msg.is_valid(),
4243            Sbp::MsgVelNedCov(msg) => msg.is_valid(),
4244            Sbp::MsgVelBody(msg) => msg.is_valid(),
4245            Sbp::MsgPosEcefCov(msg) => msg.is_valid(),
4246            Sbp::MsgVelEcefCov(msg) => msg.is_valid(),
4247            Sbp::MsgProtectionLevelDepA(msg) => msg.is_valid(),
4248            Sbp::MsgProtectionLevel(msg) => msg.is_valid(),
4249            Sbp::MsgPosLlhAcc(msg) => msg.is_valid(),
4250            Sbp::MsgVelCog(msg) => msg.is_valid(),
4251            Sbp::MsgOrientQuat(msg) => msg.is_valid(),
4252            Sbp::MsgOrientEuler(msg) => msg.is_valid(),
4253            Sbp::MsgAngularRate(msg) => msg.is_valid(),
4254            Sbp::MsgPosEcefGnss(msg) => msg.is_valid(),
4255            Sbp::MsgPosLlhGnss(msg) => msg.is_valid(),
4256            Sbp::MsgVelEcefGnss(msg) => msg.is_valid(),
4257            Sbp::MsgVelNedGnss(msg) => msg.is_valid(),
4258            Sbp::MsgPosLlhCovGnss(msg) => msg.is_valid(),
4259            Sbp::MsgVelNedCovGnss(msg) => msg.is_valid(),
4260            Sbp::MsgPosEcefCovGnss(msg) => msg.is_valid(),
4261            Sbp::MsgVelEcefCovGnss(msg) => msg.is_valid(),
4262            Sbp::MsgUtcLeapSecond(msg) => msg.is_valid(),
4263            Sbp::MsgReferenceFrameParam(msg) => msg.is_valid(),
4264            Sbp::MsgPoseRelative(msg) => msg.is_valid(),
4265            Sbp::MsgNdbEvent(msg) => msg.is_valid(),
4266            Sbp::MsgLog(msg) => msg.is_valid(),
4267            Sbp::MsgFwd(msg) => msg.is_valid(),
4268            Sbp::MsgSsrOrbitClockDepA(msg) => msg.is_valid(),
4269            Sbp::MsgSsrOrbitClock(msg) => msg.is_valid(),
4270            Sbp::MsgSsrOrbitClockBounds(msg) => msg.is_valid(),
4271            Sbp::MsgSsrOrbitClockBoundsDegradation(msg) => msg.is_valid(),
4272            Sbp::MsgSsrCodeBiases(msg) => msg.is_valid(),
4273            Sbp::MsgSsrPhaseBiases(msg) => msg.is_valid(),
4274            Sbp::MsgSsrStecCorrectionDepA(msg) => msg.is_valid(),
4275            Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.is_valid(),
4276            Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.is_valid(),
4277            Sbp::MsgSsrGridDefinitionDepA(msg) => msg.is_valid(),
4278            Sbp::MsgSsrTileDefinitionDepA(msg) => msg.is_valid(),
4279            Sbp::MsgSsrTileDefinitionDepB(msg) => msg.is_valid(),
4280            Sbp::MsgSsrTileDefinition(msg) => msg.is_valid(),
4281            Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.is_valid(),
4282            Sbp::MsgSsrStecCorrectionDep(msg) => msg.is_valid(),
4283            Sbp::MsgSsrGriddedCorrection(msg) => msg.is_valid(),
4284            Sbp::MsgSsrStecCorrection(msg) => msg.is_valid(),
4285            Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.is_valid(),
4286            Sbp::MsgSsrSatelliteApcDep(msg) => msg.is_valid(),
4287            Sbp::MsgSsrSatelliteApc(msg) => msg.is_valid(),
4288            Sbp::MsgOsr(msg) => msg.is_valid(),
4289            Sbp::MsgUserData(msg) => msg.is_valid(),
4290            Sbp::MsgImuRaw(msg) => msg.is_valid(),
4291            Sbp::MsgImuAux(msg) => msg.is_valid(),
4292            Sbp::MsgMagRaw(msg) => msg.is_valid(),
4293            Sbp::MsgOdometry(msg) => msg.is_valid(),
4294            Sbp::MsgWheeltick(msg) => msg.is_valid(),
4295            Sbp::MsgImuComp(msg) => msg.is_valid(),
4296            Sbp::MsgSsrFlagHighLevelDepA(msg) => msg.is_valid(),
4297            Sbp::MsgSsrFlagHighLevel(msg) => msg.is_valid(),
4298            Sbp::MsgSsrFlagSatellites(msg) => msg.is_valid(),
4299            Sbp::MsgSsrFlagTropoGridPoints(msg) => msg.is_valid(),
4300            Sbp::MsgSsrFlagIonoGridPoints(msg) => msg.is_valid(),
4301            Sbp::MsgSsrFlagIonoTileSatLos(msg) => msg.is_valid(),
4302            Sbp::MsgSsrFlagIonoGridPointSatLos(msg) => msg.is_valid(),
4303            Sbp::MsgAcknowledge(msg) => msg.is_valid(),
4304            Sbp::MsgEd25519SignatureDepA(msg) => msg.is_valid(),
4305            Sbp::MsgEd25519CertificateDep(msg) => msg.is_valid(),
4306            Sbp::MsgEd25519SignatureDepB(msg) => msg.is_valid(),
4307            Sbp::MsgEcdsaCertificate(msg) => msg.is_valid(),
4308            Sbp::MsgCertificateChainDep(msg) => msg.is_valid(),
4309            Sbp::MsgEcdsaSignatureDepA(msg) => msg.is_valid(),
4310            Sbp::MsgEcdsaSignatureDepB(msg) => msg.is_valid(),
4311            Sbp::MsgEcdsaSignature(msg) => msg.is_valid(),
4312            Sbp::MsgCertificateChain(msg) => msg.is_valid(),
4313            Sbp::MsgAesCmacSignature(msg) => msg.is_valid(),
4314            Sbp::MsgFileioConfigReq(msg) => msg.is_valid(),
4315            Sbp::MsgFileioConfigResp(msg) => msg.is_valid(),
4316            Sbp::MsgSbasRaw(msg) => msg.is_valid(),
4317            Sbp::MsgLinuxCpuStateDepA(msg) => msg.is_valid(),
4318            Sbp::MsgLinuxMemStateDepA(msg) => msg.is_valid(),
4319            Sbp::MsgLinuxSysStateDepA(msg) => msg.is_valid(),
4320            Sbp::MsgLinuxProcessSocketCounts(msg) => msg.is_valid(),
4321            Sbp::MsgLinuxProcessSocketQueues(msg) => msg.is_valid(),
4322            Sbp::MsgLinuxSocketUsage(msg) => msg.is_valid(),
4323            Sbp::MsgLinuxProcessFdCount(msg) => msg.is_valid(),
4324            Sbp::MsgLinuxProcessFdSummary(msg) => msg.is_valid(),
4325            Sbp::MsgLinuxCpuState(msg) => msg.is_valid(),
4326            Sbp::MsgLinuxMemState(msg) => msg.is_valid(),
4327            Sbp::MsgLinuxSysState(msg) => msg.is_valid(),
4328            Sbp::MsgMeasurementPoint(msg) => msg.is_valid(),
4329            Sbp::MsgProfilingSystemInfo(msg) => msg.is_valid(),
4330            Sbp::MsgProfilingThreadInfo(msg) => msg.is_valid(),
4331            Sbp::MsgProfilingResourceCounter(msg) => msg.is_valid(),
4332            Sbp::MsgStartup(msg) => msg.is_valid(),
4333            Sbp::MsgDgnssStatus(msg) => msg.is_valid(),
4334            Sbp::MsgInsStatus(msg) => msg.is_valid(),
4335            Sbp::MsgCsacTelemetry(msg) => msg.is_valid(),
4336            Sbp::MsgCsacTelemetryLabels(msg) => msg.is_valid(),
4337            Sbp::MsgInsUpdates(msg) => msg.is_valid(),
4338            Sbp::MsgGnssTimeOffset(msg) => msg.is_valid(),
4339            Sbp::MsgPpsTime(msg) => msg.is_valid(),
4340            Sbp::MsgSensorAidEvent(msg) => msg.is_valid(),
4341            Sbp::MsgGroupMeta(msg) => msg.is_valid(),
4342            Sbp::MsgSolnMeta(msg) => msg.is_valid(),
4343            Sbp::MsgSolnMetaDepA(msg) => msg.is_valid(),
4344            Sbp::MsgStatusJournal(msg) => msg.is_valid(),
4345            Sbp::MsgStatusReport(msg) => msg.is_valid(),
4346            Sbp::MsgHeartbeat(msg) => msg.is_valid(),
4347            Sbp::Unknown(msg) => msg.is_valid(),
4348            Sbp::Invalid(msg) => msg.is_valid(),
4349        }
4350    }
4351    fn into_valid_msg(self) -> Result<Self, crate::messages::invalid::Invalid> {
4352        match self {
4353            Sbp::MsgPrintDep(msg) => Ok(Sbp::MsgPrintDep(msg.into_valid_msg()?)),
4354            Sbp::MsgTrackingStateDetailedDep(msg) => {
4355                Ok(Sbp::MsgTrackingStateDetailedDep(msg.into_valid_msg()?))
4356            }
4357            Sbp::MsgTrackingStateDepB(msg) => Ok(Sbp::MsgTrackingStateDepB(msg.into_valid_msg()?)),
4358            Sbp::MsgAcqResultDepB(msg) => Ok(Sbp::MsgAcqResultDepB(msg.into_valid_msg()?)),
4359            Sbp::MsgAcqResultDepA(msg) => Ok(Sbp::MsgAcqResultDepA(msg.into_valid_msg()?)),
4360            Sbp::MsgTrackingStateDepA(msg) => Ok(Sbp::MsgTrackingStateDepA(msg.into_valid_msg()?)),
4361            Sbp::MsgThreadState(msg) => Ok(Sbp::MsgThreadState(msg.into_valid_msg()?)),
4362            Sbp::MsgUartStateDepa(msg) => Ok(Sbp::MsgUartStateDepa(msg.into_valid_msg()?)),
4363            Sbp::MsgIarState(msg) => Ok(Sbp::MsgIarState(msg.into_valid_msg()?)),
4364            Sbp::MsgEphemerisDepA(msg) => Ok(Sbp::MsgEphemerisDepA(msg.into_valid_msg()?)),
4365            Sbp::MsgMaskSatelliteDep(msg) => Ok(Sbp::MsgMaskSatelliteDep(msg.into_valid_msg()?)),
4366            Sbp::MsgTrackingIqDepA(msg) => Ok(Sbp::MsgTrackingIqDepA(msg.into_valid_msg()?)),
4367            Sbp::MsgUartState(msg) => Ok(Sbp::MsgUartState(msg.into_valid_msg()?)),
4368            Sbp::MsgAcqSvProfileDep(msg) => Ok(Sbp::MsgAcqSvProfileDep(msg.into_valid_msg()?)),
4369            Sbp::MsgAcqResultDepC(msg) => Ok(Sbp::MsgAcqResultDepC(msg.into_valid_msg()?)),
4370            Sbp::MsgTrackingStateDetailedDepA(msg) => {
4371                Ok(Sbp::MsgTrackingStateDetailedDepA(msg.into_valid_msg()?))
4372            }
4373            Sbp::MsgResetFilters(msg) => Ok(Sbp::MsgResetFilters(msg.into_valid_msg()?)),
4374            Sbp::MsgInitBaseDep(msg) => Ok(Sbp::MsgInitBaseDep(msg.into_valid_msg()?)),
4375            Sbp::MsgMaskSatellite(msg) => Ok(Sbp::MsgMaskSatellite(msg.into_valid_msg()?)),
4376            Sbp::MsgTrackingIqDepB(msg) => Ok(Sbp::MsgTrackingIqDepB(msg.into_valid_msg()?)),
4377            Sbp::MsgTrackingIq(msg) => Ok(Sbp::MsgTrackingIq(msg.into_valid_msg()?)),
4378            Sbp::MsgAcqSvProfile(msg) => Ok(Sbp::MsgAcqSvProfile(msg.into_valid_msg()?)),
4379            Sbp::MsgAcqResult(msg) => Ok(Sbp::MsgAcqResult(msg.into_valid_msg()?)),
4380            Sbp::MsgTrackingState(msg) => Ok(Sbp::MsgTrackingState(msg.into_valid_msg()?)),
4381            Sbp::MsgObsDepB(msg) => Ok(Sbp::MsgObsDepB(msg.into_valid_msg()?)),
4382            Sbp::MsgBasePosLlh(msg) => Ok(Sbp::MsgBasePosLlh(msg.into_valid_msg()?)),
4383            Sbp::MsgObsDepA(msg) => Ok(Sbp::MsgObsDepA(msg.into_valid_msg()?)),
4384            Sbp::MsgEphemerisDepB(msg) => Ok(Sbp::MsgEphemerisDepB(msg.into_valid_msg()?)),
4385            Sbp::MsgEphemerisDepC(msg) => Ok(Sbp::MsgEphemerisDepC(msg.into_valid_msg()?)),
4386            Sbp::MsgBasePosEcef(msg) => Ok(Sbp::MsgBasePosEcef(msg.into_valid_msg()?)),
4387            Sbp::MsgObsDepC(msg) => Ok(Sbp::MsgObsDepC(msg.into_valid_msg()?)),
4388            Sbp::MsgObs(msg) => Ok(Sbp::MsgObs(msg.into_valid_msg()?)),
4389            Sbp::MsgSpecanDep(msg) => Ok(Sbp::MsgSpecanDep(msg.into_valid_msg()?)),
4390            Sbp::MsgSpecan(msg) => Ok(Sbp::MsgSpecan(msg.into_valid_msg()?)),
4391            Sbp::MsgMeasurementState(msg) => Ok(Sbp::MsgMeasurementState(msg.into_valid_msg()?)),
4392            Sbp::MsgSetTime(msg) => Ok(Sbp::MsgSetTime(msg.into_valid_msg()?)),
4393            Sbp::MsgAlmanac(msg) => Ok(Sbp::MsgAlmanac(msg.into_valid_msg()?)),
4394            Sbp::MsgAlmanacGpsDep(msg) => Ok(Sbp::MsgAlmanacGpsDep(msg.into_valid_msg()?)),
4395            Sbp::MsgAlmanacGloDep(msg) => Ok(Sbp::MsgAlmanacGloDep(msg.into_valid_msg()?)),
4396            Sbp::MsgAlmanacGps(msg) => Ok(Sbp::MsgAlmanacGps(msg.into_valid_msg()?)),
4397            Sbp::MsgAlmanacGlo(msg) => Ok(Sbp::MsgAlmanacGlo(msg.into_valid_msg()?)),
4398            Sbp::MsgGloBiases(msg) => Ok(Sbp::MsgGloBiases(msg.into_valid_msg()?)),
4399            Sbp::MsgEphemerisDepD(msg) => Ok(Sbp::MsgEphemerisDepD(msg.into_valid_msg()?)),
4400            Sbp::MsgEphemerisGpsDepE(msg) => Ok(Sbp::MsgEphemerisGpsDepE(msg.into_valid_msg()?)),
4401            Sbp::MsgEphemerisSbasDepA(msg) => Ok(Sbp::MsgEphemerisSbasDepA(msg.into_valid_msg()?)),
4402            Sbp::MsgEphemerisGloDepA(msg) => Ok(Sbp::MsgEphemerisGloDepA(msg.into_valid_msg()?)),
4403            Sbp::MsgEphemerisSbasDepB(msg) => Ok(Sbp::MsgEphemerisSbasDepB(msg.into_valid_msg()?)),
4404            Sbp::MsgEphemerisGloDepB(msg) => Ok(Sbp::MsgEphemerisGloDepB(msg.into_valid_msg()?)),
4405            Sbp::MsgEphemerisGpsDepF(msg) => Ok(Sbp::MsgEphemerisGpsDepF(msg.into_valid_msg()?)),
4406            Sbp::MsgEphemerisGloDepC(msg) => Ok(Sbp::MsgEphemerisGloDepC(msg.into_valid_msg()?)),
4407            Sbp::MsgEphemerisGloDepD(msg) => Ok(Sbp::MsgEphemerisGloDepD(msg.into_valid_msg()?)),
4408            Sbp::MsgEphemerisBds(msg) => Ok(Sbp::MsgEphemerisBds(msg.into_valid_msg()?)),
4409            Sbp::MsgEphemerisGps(msg) => Ok(Sbp::MsgEphemerisGps(msg.into_valid_msg()?)),
4410            Sbp::MsgEphemerisGlo(msg) => Ok(Sbp::MsgEphemerisGlo(msg.into_valid_msg()?)),
4411            Sbp::MsgEphemerisSbas(msg) => Ok(Sbp::MsgEphemerisSbas(msg.into_valid_msg()?)),
4412            Sbp::MsgEphemerisGal(msg) => Ok(Sbp::MsgEphemerisGal(msg.into_valid_msg()?)),
4413            Sbp::MsgEphemerisQzss(msg) => Ok(Sbp::MsgEphemerisQzss(msg.into_valid_msg()?)),
4414            Sbp::MsgIono(msg) => Ok(Sbp::MsgIono(msg.into_valid_msg()?)),
4415            Sbp::MsgSvConfigurationGpsDep(msg) => {
4416                Ok(Sbp::MsgSvConfigurationGpsDep(msg.into_valid_msg()?))
4417            }
4418            Sbp::MsgGroupDelayDepA(msg) => Ok(Sbp::MsgGroupDelayDepA(msg.into_valid_msg()?)),
4419            Sbp::MsgGroupDelayDepB(msg) => Ok(Sbp::MsgGroupDelayDepB(msg.into_valid_msg()?)),
4420            Sbp::MsgGroupDelay(msg) => Ok(Sbp::MsgGroupDelay(msg.into_valid_msg()?)),
4421            Sbp::MsgEphemerisGalDepA(msg) => Ok(Sbp::MsgEphemerisGalDepA(msg.into_valid_msg()?)),
4422            Sbp::MsgGnssCapb(msg) => Ok(Sbp::MsgGnssCapb(msg.into_valid_msg()?)),
4423            Sbp::MsgSvAzEl(msg) => Ok(Sbp::MsgSvAzEl(msg.into_valid_msg()?)),
4424            Sbp::MsgSettingsWrite(msg) => Ok(Sbp::MsgSettingsWrite(msg.into_valid_msg()?)),
4425            Sbp::MsgSettingsSave(msg) => Ok(Sbp::MsgSettingsSave(msg.into_valid_msg()?)),
4426            Sbp::MsgSettingsReadByIndexReq(msg) => {
4427                Ok(Sbp::MsgSettingsReadByIndexReq(msg.into_valid_msg()?))
4428            }
4429            Sbp::MsgFileioReadResp(msg) => Ok(Sbp::MsgFileioReadResp(msg.into_valid_msg()?)),
4430            Sbp::MsgSettingsReadReq(msg) => Ok(Sbp::MsgSettingsReadReq(msg.into_valid_msg()?)),
4431            Sbp::MsgSettingsReadResp(msg) => Ok(Sbp::MsgSettingsReadResp(msg.into_valid_msg()?)),
4432            Sbp::MsgSettingsReadByIndexDone(msg) => {
4433                Ok(Sbp::MsgSettingsReadByIndexDone(msg.into_valid_msg()?))
4434            }
4435            Sbp::MsgSettingsReadByIndexResp(msg) => {
4436                Ok(Sbp::MsgSettingsReadByIndexResp(msg.into_valid_msg()?))
4437            }
4438            Sbp::MsgFileioReadReq(msg) => Ok(Sbp::MsgFileioReadReq(msg.into_valid_msg()?)),
4439            Sbp::MsgFileioReadDirReq(msg) => Ok(Sbp::MsgFileioReadDirReq(msg.into_valid_msg()?)),
4440            Sbp::MsgFileioReadDirResp(msg) => Ok(Sbp::MsgFileioReadDirResp(msg.into_valid_msg()?)),
4441            Sbp::MsgFileioWriteResp(msg) => Ok(Sbp::MsgFileioWriteResp(msg.into_valid_msg()?)),
4442            Sbp::MsgFileioRemove(msg) => Ok(Sbp::MsgFileioRemove(msg.into_valid_msg()?)),
4443            Sbp::MsgFileioWriteReq(msg) => Ok(Sbp::MsgFileioWriteReq(msg.into_valid_msg()?)),
4444            Sbp::MsgSettingsRegister(msg) => Ok(Sbp::MsgSettingsRegister(msg.into_valid_msg()?)),
4445            Sbp::MsgSettingsWriteResp(msg) => Ok(Sbp::MsgSettingsWriteResp(msg.into_valid_msg()?)),
4446            Sbp::MsgBootloaderHandshakeDepA(msg) => {
4447                Ok(Sbp::MsgBootloaderHandshakeDepA(msg.into_valid_msg()?))
4448            }
4449            Sbp::MsgBootloaderJumpToApp(msg) => {
4450                Ok(Sbp::MsgBootloaderJumpToApp(msg.into_valid_msg()?))
4451            }
4452            Sbp::MsgResetDep(msg) => Ok(Sbp::MsgResetDep(msg.into_valid_msg()?)),
4453            Sbp::MsgBootloaderHandshakeReq(msg) => {
4454                Ok(Sbp::MsgBootloaderHandshakeReq(msg.into_valid_msg()?))
4455            }
4456            Sbp::MsgBootloaderHandshakeResp(msg) => {
4457                Ok(Sbp::MsgBootloaderHandshakeResp(msg.into_valid_msg()?))
4458            }
4459            Sbp::MsgDeviceMonitor(msg) => Ok(Sbp::MsgDeviceMonitor(msg.into_valid_msg()?)),
4460            Sbp::MsgReset(msg) => Ok(Sbp::MsgReset(msg.into_valid_msg()?)),
4461            Sbp::MsgCommandReq(msg) => Ok(Sbp::MsgCommandReq(msg.into_valid_msg()?)),
4462            Sbp::MsgCommandResp(msg) => Ok(Sbp::MsgCommandResp(msg.into_valid_msg()?)),
4463            Sbp::MsgNetworkStateReq(msg) => Ok(Sbp::MsgNetworkStateReq(msg.into_valid_msg()?)),
4464            Sbp::MsgNetworkStateResp(msg) => Ok(Sbp::MsgNetworkStateResp(msg.into_valid_msg()?)),
4465            Sbp::MsgCommandOutput(msg) => Ok(Sbp::MsgCommandOutput(msg.into_valid_msg()?)),
4466            Sbp::MsgNetworkBandwidthUsage(msg) => {
4467                Ok(Sbp::MsgNetworkBandwidthUsage(msg.into_valid_msg()?))
4468            }
4469            Sbp::MsgCellModemStatus(msg) => Ok(Sbp::MsgCellModemStatus(msg.into_valid_msg()?)),
4470            Sbp::MsgFrontEndGain(msg) => Ok(Sbp::MsgFrontEndGain(msg.into_valid_msg()?)),
4471            Sbp::MsgCwResults(msg) => Ok(Sbp::MsgCwResults(msg.into_valid_msg()?)),
4472            Sbp::MsgCwStart(msg) => Ok(Sbp::MsgCwStart(msg.into_valid_msg()?)),
4473            Sbp::MsgNapDeviceDnaResp(msg) => Ok(Sbp::MsgNapDeviceDnaResp(msg.into_valid_msg()?)),
4474            Sbp::MsgNapDeviceDnaReq(msg) => Ok(Sbp::MsgNapDeviceDnaReq(msg.into_valid_msg()?)),
4475            Sbp::MsgFlashDone(msg) => Ok(Sbp::MsgFlashDone(msg.into_valid_msg()?)),
4476            Sbp::MsgFlashReadResp(msg) => Ok(Sbp::MsgFlashReadResp(msg.into_valid_msg()?)),
4477            Sbp::MsgFlashErase(msg) => Ok(Sbp::MsgFlashErase(msg.into_valid_msg()?)),
4478            Sbp::MsgStmFlashLockSector(msg) => {
4479                Ok(Sbp::MsgStmFlashLockSector(msg.into_valid_msg()?))
4480            }
4481            Sbp::MsgStmFlashUnlockSector(msg) => {
4482                Ok(Sbp::MsgStmFlashUnlockSector(msg.into_valid_msg()?))
4483            }
4484            Sbp::MsgStmUniqueIdResp(msg) => Ok(Sbp::MsgStmUniqueIdResp(msg.into_valid_msg()?)),
4485            Sbp::MsgFlashProgram(msg) => Ok(Sbp::MsgFlashProgram(msg.into_valid_msg()?)),
4486            Sbp::MsgFlashReadReq(msg) => Ok(Sbp::MsgFlashReadReq(msg.into_valid_msg()?)),
4487            Sbp::MsgStmUniqueIdReq(msg) => Ok(Sbp::MsgStmUniqueIdReq(msg.into_valid_msg()?)),
4488            Sbp::MsgM25FlashWriteStatus(msg) => {
4489                Ok(Sbp::MsgM25FlashWriteStatus(msg.into_valid_msg()?))
4490            }
4491            Sbp::MsgGpsTimeDepA(msg) => Ok(Sbp::MsgGpsTimeDepA(msg.into_valid_msg()?)),
4492            Sbp::MsgExtEvent(msg) => Ok(Sbp::MsgExtEvent(msg.into_valid_msg()?)),
4493            Sbp::MsgGpsTime(msg) => Ok(Sbp::MsgGpsTime(msg.into_valid_msg()?)),
4494            Sbp::MsgUtcTime(msg) => Ok(Sbp::MsgUtcTime(msg.into_valid_msg()?)),
4495            Sbp::MsgGpsTimeGnss(msg) => Ok(Sbp::MsgGpsTimeGnss(msg.into_valid_msg()?)),
4496            Sbp::MsgUtcTimeGnss(msg) => Ok(Sbp::MsgUtcTimeGnss(msg.into_valid_msg()?)),
4497            Sbp::MsgTelSv(msg) => Ok(Sbp::MsgTelSv(msg.into_valid_msg()?)),
4498            Sbp::MsgSettingsRegisterResp(msg) => {
4499                Ok(Sbp::MsgSettingsRegisterResp(msg.into_valid_msg()?))
4500            }
4501            Sbp::MsgPosEcefDepA(msg) => Ok(Sbp::MsgPosEcefDepA(msg.into_valid_msg()?)),
4502            Sbp::MsgPosLlhDepA(msg) => Ok(Sbp::MsgPosLlhDepA(msg.into_valid_msg()?)),
4503            Sbp::MsgBaselineEcefDepA(msg) => Ok(Sbp::MsgBaselineEcefDepA(msg.into_valid_msg()?)),
4504            Sbp::MsgBaselineNedDepA(msg) => Ok(Sbp::MsgBaselineNedDepA(msg.into_valid_msg()?)),
4505            Sbp::MsgVelEcefDepA(msg) => Ok(Sbp::MsgVelEcefDepA(msg.into_valid_msg()?)),
4506            Sbp::MsgVelNedDepA(msg) => Ok(Sbp::MsgVelNedDepA(msg.into_valid_msg()?)),
4507            Sbp::MsgDopsDepA(msg) => Ok(Sbp::MsgDopsDepA(msg.into_valid_msg()?)),
4508            Sbp::MsgBaselineHeadingDepA(msg) => {
4509                Ok(Sbp::MsgBaselineHeadingDepA(msg.into_valid_msg()?))
4510            }
4511            Sbp::MsgDops(msg) => Ok(Sbp::MsgDops(msg.into_valid_msg()?)),
4512            Sbp::MsgPosEcef(msg) => Ok(Sbp::MsgPosEcef(msg.into_valid_msg()?)),
4513            Sbp::MsgPosLlh(msg) => Ok(Sbp::MsgPosLlh(msg.into_valid_msg()?)),
4514            Sbp::MsgBaselineEcef(msg) => Ok(Sbp::MsgBaselineEcef(msg.into_valid_msg()?)),
4515            Sbp::MsgBaselineNed(msg) => Ok(Sbp::MsgBaselineNed(msg.into_valid_msg()?)),
4516            Sbp::MsgVelEcef(msg) => Ok(Sbp::MsgVelEcef(msg.into_valid_msg()?)),
4517            Sbp::MsgVelNed(msg) => Ok(Sbp::MsgVelNed(msg.into_valid_msg()?)),
4518            Sbp::MsgBaselineHeading(msg) => Ok(Sbp::MsgBaselineHeading(msg.into_valid_msg()?)),
4519            Sbp::MsgAgeCorrections(msg) => Ok(Sbp::MsgAgeCorrections(msg.into_valid_msg()?)),
4520            Sbp::MsgPosLlhCov(msg) => Ok(Sbp::MsgPosLlhCov(msg.into_valid_msg()?)),
4521            Sbp::MsgVelNedCov(msg) => Ok(Sbp::MsgVelNedCov(msg.into_valid_msg()?)),
4522            Sbp::MsgVelBody(msg) => Ok(Sbp::MsgVelBody(msg.into_valid_msg()?)),
4523            Sbp::MsgPosEcefCov(msg) => Ok(Sbp::MsgPosEcefCov(msg.into_valid_msg()?)),
4524            Sbp::MsgVelEcefCov(msg) => Ok(Sbp::MsgVelEcefCov(msg.into_valid_msg()?)),
4525            Sbp::MsgProtectionLevelDepA(msg) => {
4526                Ok(Sbp::MsgProtectionLevelDepA(msg.into_valid_msg()?))
4527            }
4528            Sbp::MsgProtectionLevel(msg) => Ok(Sbp::MsgProtectionLevel(msg.into_valid_msg()?)),
4529            Sbp::MsgPosLlhAcc(msg) => Ok(Sbp::MsgPosLlhAcc(msg.into_valid_msg()?)),
4530            Sbp::MsgVelCog(msg) => Ok(Sbp::MsgVelCog(msg.into_valid_msg()?)),
4531            Sbp::MsgOrientQuat(msg) => Ok(Sbp::MsgOrientQuat(msg.into_valid_msg()?)),
4532            Sbp::MsgOrientEuler(msg) => Ok(Sbp::MsgOrientEuler(msg.into_valid_msg()?)),
4533            Sbp::MsgAngularRate(msg) => Ok(Sbp::MsgAngularRate(msg.into_valid_msg()?)),
4534            Sbp::MsgPosEcefGnss(msg) => Ok(Sbp::MsgPosEcefGnss(msg.into_valid_msg()?)),
4535            Sbp::MsgPosLlhGnss(msg) => Ok(Sbp::MsgPosLlhGnss(msg.into_valid_msg()?)),
4536            Sbp::MsgVelEcefGnss(msg) => Ok(Sbp::MsgVelEcefGnss(msg.into_valid_msg()?)),
4537            Sbp::MsgVelNedGnss(msg) => Ok(Sbp::MsgVelNedGnss(msg.into_valid_msg()?)),
4538            Sbp::MsgPosLlhCovGnss(msg) => Ok(Sbp::MsgPosLlhCovGnss(msg.into_valid_msg()?)),
4539            Sbp::MsgVelNedCovGnss(msg) => Ok(Sbp::MsgVelNedCovGnss(msg.into_valid_msg()?)),
4540            Sbp::MsgPosEcefCovGnss(msg) => Ok(Sbp::MsgPosEcefCovGnss(msg.into_valid_msg()?)),
4541            Sbp::MsgVelEcefCovGnss(msg) => Ok(Sbp::MsgVelEcefCovGnss(msg.into_valid_msg()?)),
4542            Sbp::MsgUtcLeapSecond(msg) => Ok(Sbp::MsgUtcLeapSecond(msg.into_valid_msg()?)),
4543            Sbp::MsgReferenceFrameParam(msg) => {
4544                Ok(Sbp::MsgReferenceFrameParam(msg.into_valid_msg()?))
4545            }
4546            Sbp::MsgPoseRelative(msg) => Ok(Sbp::MsgPoseRelative(msg.into_valid_msg()?)),
4547            Sbp::MsgNdbEvent(msg) => Ok(Sbp::MsgNdbEvent(msg.into_valid_msg()?)),
4548            Sbp::MsgLog(msg) => Ok(Sbp::MsgLog(msg.into_valid_msg()?)),
4549            Sbp::MsgFwd(msg) => Ok(Sbp::MsgFwd(msg.into_valid_msg()?)),
4550            Sbp::MsgSsrOrbitClockDepA(msg) => Ok(Sbp::MsgSsrOrbitClockDepA(msg.into_valid_msg()?)),
4551            Sbp::MsgSsrOrbitClock(msg) => Ok(Sbp::MsgSsrOrbitClock(msg.into_valid_msg()?)),
4552            Sbp::MsgSsrOrbitClockBounds(msg) => {
4553                Ok(Sbp::MsgSsrOrbitClockBounds(msg.into_valid_msg()?))
4554            }
4555            Sbp::MsgSsrOrbitClockBoundsDegradation(msg) => Ok(
4556                Sbp::MsgSsrOrbitClockBoundsDegradation(msg.into_valid_msg()?),
4557            ),
4558            Sbp::MsgSsrCodeBiases(msg) => Ok(Sbp::MsgSsrCodeBiases(msg.into_valid_msg()?)),
4559            Sbp::MsgSsrPhaseBiases(msg) => Ok(Sbp::MsgSsrPhaseBiases(msg.into_valid_msg()?)),
4560            Sbp::MsgSsrStecCorrectionDepA(msg) => {
4561                Ok(Sbp::MsgSsrStecCorrectionDepA(msg.into_valid_msg()?))
4562            }
4563            Sbp::MsgSsrCodePhaseBiasesBounds(msg) => {
4564                Ok(Sbp::MsgSsrCodePhaseBiasesBounds(msg.into_valid_msg()?))
4565            }
4566            Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => {
4567                Ok(Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg.into_valid_msg()?))
4568            }
4569            Sbp::MsgSsrGridDefinitionDepA(msg) => {
4570                Ok(Sbp::MsgSsrGridDefinitionDepA(msg.into_valid_msg()?))
4571            }
4572            Sbp::MsgSsrTileDefinitionDepA(msg) => {
4573                Ok(Sbp::MsgSsrTileDefinitionDepA(msg.into_valid_msg()?))
4574            }
4575            Sbp::MsgSsrTileDefinitionDepB(msg) => {
4576                Ok(Sbp::MsgSsrTileDefinitionDepB(msg.into_valid_msg()?))
4577            }
4578            Sbp::MsgSsrTileDefinition(msg) => Ok(Sbp::MsgSsrTileDefinition(msg.into_valid_msg()?)),
4579            Sbp::MsgSsrGriddedCorrectionDepA(msg) => {
4580                Ok(Sbp::MsgSsrGriddedCorrectionDepA(msg.into_valid_msg()?))
4581            }
4582            Sbp::MsgSsrStecCorrectionDep(msg) => {
4583                Ok(Sbp::MsgSsrStecCorrectionDep(msg.into_valid_msg()?))
4584            }
4585            Sbp::MsgSsrGriddedCorrection(msg) => {
4586                Ok(Sbp::MsgSsrGriddedCorrection(msg.into_valid_msg()?))
4587            }
4588            Sbp::MsgSsrStecCorrection(msg) => Ok(Sbp::MsgSsrStecCorrection(msg.into_valid_msg()?)),
4589            Sbp::MsgSsrGriddedCorrectionBounds(msg) => {
4590                Ok(Sbp::MsgSsrGriddedCorrectionBounds(msg.into_valid_msg()?))
4591            }
4592            Sbp::MsgSsrSatelliteApcDep(msg) => {
4593                Ok(Sbp::MsgSsrSatelliteApcDep(msg.into_valid_msg()?))
4594            }
4595            Sbp::MsgSsrSatelliteApc(msg) => Ok(Sbp::MsgSsrSatelliteApc(msg.into_valid_msg()?)),
4596            Sbp::MsgOsr(msg) => Ok(Sbp::MsgOsr(msg.into_valid_msg()?)),
4597            Sbp::MsgUserData(msg) => Ok(Sbp::MsgUserData(msg.into_valid_msg()?)),
4598            Sbp::MsgImuRaw(msg) => Ok(Sbp::MsgImuRaw(msg.into_valid_msg()?)),
4599            Sbp::MsgImuAux(msg) => Ok(Sbp::MsgImuAux(msg.into_valid_msg()?)),
4600            Sbp::MsgMagRaw(msg) => Ok(Sbp::MsgMagRaw(msg.into_valid_msg()?)),
4601            Sbp::MsgOdometry(msg) => Ok(Sbp::MsgOdometry(msg.into_valid_msg()?)),
4602            Sbp::MsgWheeltick(msg) => Ok(Sbp::MsgWheeltick(msg.into_valid_msg()?)),
4603            Sbp::MsgImuComp(msg) => Ok(Sbp::MsgImuComp(msg.into_valid_msg()?)),
4604            Sbp::MsgSsrFlagHighLevelDepA(msg) => {
4605                Ok(Sbp::MsgSsrFlagHighLevelDepA(msg.into_valid_msg()?))
4606            }
4607            Sbp::MsgSsrFlagHighLevel(msg) => Ok(Sbp::MsgSsrFlagHighLevel(msg.into_valid_msg()?)),
4608            Sbp::MsgSsrFlagSatellites(msg) => Ok(Sbp::MsgSsrFlagSatellites(msg.into_valid_msg()?)),
4609            Sbp::MsgSsrFlagTropoGridPoints(msg) => {
4610                Ok(Sbp::MsgSsrFlagTropoGridPoints(msg.into_valid_msg()?))
4611            }
4612            Sbp::MsgSsrFlagIonoGridPoints(msg) => {
4613                Ok(Sbp::MsgSsrFlagIonoGridPoints(msg.into_valid_msg()?))
4614            }
4615            Sbp::MsgSsrFlagIonoTileSatLos(msg) => {
4616                Ok(Sbp::MsgSsrFlagIonoTileSatLos(msg.into_valid_msg()?))
4617            }
4618            Sbp::MsgSsrFlagIonoGridPointSatLos(msg) => {
4619                Ok(Sbp::MsgSsrFlagIonoGridPointSatLos(msg.into_valid_msg()?))
4620            }
4621            Sbp::MsgAcknowledge(msg) => Ok(Sbp::MsgAcknowledge(msg.into_valid_msg()?)),
4622            Sbp::MsgEd25519SignatureDepA(msg) => {
4623                Ok(Sbp::MsgEd25519SignatureDepA(msg.into_valid_msg()?))
4624            }
4625            Sbp::MsgEd25519CertificateDep(msg) => {
4626                Ok(Sbp::MsgEd25519CertificateDep(msg.into_valid_msg()?))
4627            }
4628            Sbp::MsgEd25519SignatureDepB(msg) => {
4629                Ok(Sbp::MsgEd25519SignatureDepB(msg.into_valid_msg()?))
4630            }
4631            Sbp::MsgEcdsaCertificate(msg) => Ok(Sbp::MsgEcdsaCertificate(msg.into_valid_msg()?)),
4632            Sbp::MsgCertificateChainDep(msg) => {
4633                Ok(Sbp::MsgCertificateChainDep(msg.into_valid_msg()?))
4634            }
4635            Sbp::MsgEcdsaSignatureDepA(msg) => {
4636                Ok(Sbp::MsgEcdsaSignatureDepA(msg.into_valid_msg()?))
4637            }
4638            Sbp::MsgEcdsaSignatureDepB(msg) => {
4639                Ok(Sbp::MsgEcdsaSignatureDepB(msg.into_valid_msg()?))
4640            }
4641            Sbp::MsgEcdsaSignature(msg) => Ok(Sbp::MsgEcdsaSignature(msg.into_valid_msg()?)),
4642            Sbp::MsgCertificateChain(msg) => Ok(Sbp::MsgCertificateChain(msg.into_valid_msg()?)),
4643            Sbp::MsgAesCmacSignature(msg) => Ok(Sbp::MsgAesCmacSignature(msg.into_valid_msg()?)),
4644            Sbp::MsgFileioConfigReq(msg) => Ok(Sbp::MsgFileioConfigReq(msg.into_valid_msg()?)),
4645            Sbp::MsgFileioConfigResp(msg) => Ok(Sbp::MsgFileioConfigResp(msg.into_valid_msg()?)),
4646            Sbp::MsgSbasRaw(msg) => Ok(Sbp::MsgSbasRaw(msg.into_valid_msg()?)),
4647            Sbp::MsgLinuxCpuStateDepA(msg) => Ok(Sbp::MsgLinuxCpuStateDepA(msg.into_valid_msg()?)),
4648            Sbp::MsgLinuxMemStateDepA(msg) => Ok(Sbp::MsgLinuxMemStateDepA(msg.into_valid_msg()?)),
4649            Sbp::MsgLinuxSysStateDepA(msg) => Ok(Sbp::MsgLinuxSysStateDepA(msg.into_valid_msg()?)),
4650            Sbp::MsgLinuxProcessSocketCounts(msg) => {
4651                Ok(Sbp::MsgLinuxProcessSocketCounts(msg.into_valid_msg()?))
4652            }
4653            Sbp::MsgLinuxProcessSocketQueues(msg) => {
4654                Ok(Sbp::MsgLinuxProcessSocketQueues(msg.into_valid_msg()?))
4655            }
4656            Sbp::MsgLinuxSocketUsage(msg) => Ok(Sbp::MsgLinuxSocketUsage(msg.into_valid_msg()?)),
4657            Sbp::MsgLinuxProcessFdCount(msg) => {
4658                Ok(Sbp::MsgLinuxProcessFdCount(msg.into_valid_msg()?))
4659            }
4660            Sbp::MsgLinuxProcessFdSummary(msg) => {
4661                Ok(Sbp::MsgLinuxProcessFdSummary(msg.into_valid_msg()?))
4662            }
4663            Sbp::MsgLinuxCpuState(msg) => Ok(Sbp::MsgLinuxCpuState(msg.into_valid_msg()?)),
4664            Sbp::MsgLinuxMemState(msg) => Ok(Sbp::MsgLinuxMemState(msg.into_valid_msg()?)),
4665            Sbp::MsgLinuxSysState(msg) => Ok(Sbp::MsgLinuxSysState(msg.into_valid_msg()?)),
4666            Sbp::MsgMeasurementPoint(msg) => Ok(Sbp::MsgMeasurementPoint(msg.into_valid_msg()?)),
4667            Sbp::MsgProfilingSystemInfo(msg) => {
4668                Ok(Sbp::MsgProfilingSystemInfo(msg.into_valid_msg()?))
4669            }
4670            Sbp::MsgProfilingThreadInfo(msg) => {
4671                Ok(Sbp::MsgProfilingThreadInfo(msg.into_valid_msg()?))
4672            }
4673            Sbp::MsgProfilingResourceCounter(msg) => {
4674                Ok(Sbp::MsgProfilingResourceCounter(msg.into_valid_msg()?))
4675            }
4676            Sbp::MsgStartup(msg) => Ok(Sbp::MsgStartup(msg.into_valid_msg()?)),
4677            Sbp::MsgDgnssStatus(msg) => Ok(Sbp::MsgDgnssStatus(msg.into_valid_msg()?)),
4678            Sbp::MsgInsStatus(msg) => Ok(Sbp::MsgInsStatus(msg.into_valid_msg()?)),
4679            Sbp::MsgCsacTelemetry(msg) => Ok(Sbp::MsgCsacTelemetry(msg.into_valid_msg()?)),
4680            Sbp::MsgCsacTelemetryLabels(msg) => {
4681                Ok(Sbp::MsgCsacTelemetryLabels(msg.into_valid_msg()?))
4682            }
4683            Sbp::MsgInsUpdates(msg) => Ok(Sbp::MsgInsUpdates(msg.into_valid_msg()?)),
4684            Sbp::MsgGnssTimeOffset(msg) => Ok(Sbp::MsgGnssTimeOffset(msg.into_valid_msg()?)),
4685            Sbp::MsgPpsTime(msg) => Ok(Sbp::MsgPpsTime(msg.into_valid_msg()?)),
4686            Sbp::MsgSensorAidEvent(msg) => Ok(Sbp::MsgSensorAidEvent(msg.into_valid_msg()?)),
4687            Sbp::MsgGroupMeta(msg) => Ok(Sbp::MsgGroupMeta(msg.into_valid_msg()?)),
4688            Sbp::MsgSolnMeta(msg) => Ok(Sbp::MsgSolnMeta(msg.into_valid_msg()?)),
4689            Sbp::MsgSolnMetaDepA(msg) => Ok(Sbp::MsgSolnMetaDepA(msg.into_valid_msg()?)),
4690            Sbp::MsgStatusJournal(msg) => Ok(Sbp::MsgStatusJournal(msg.into_valid_msg()?)),
4691            Sbp::MsgStatusReport(msg) => Ok(Sbp::MsgStatusReport(msg.into_valid_msg()?)),
4692            Sbp::MsgHeartbeat(msg) => Ok(Sbp::MsgHeartbeat(msg.into_valid_msg()?)),
4693            Sbp::Unknown(msg) => Ok(Sbp::Unknown(msg.into_valid_msg()?)),
4694            Sbp::Invalid(msg) => {
4695                // should never pass
4696                let res = msg.into_valid_msg();
4697                debug_assert!(res.is_err(), "invalid messages may never be valid");
4698                Ok(Sbp::Invalid(res?))
4699            }
4700        }
4701    }
4702}
4703
4704impl WireFormat for Sbp {
4705    const MIN_LEN: usize = crate::MAX_FRAME_LEN;
4706
4707    fn parse_unchecked<B: Buf>(_: &mut B) -> Self {
4708        unimplemented!("Sbp must be parsed with Sbp::from_parts");
4709    }
4710
4711    fn write<B: BufMut>(&self, buf: &mut B) {
4712        match self {
4713            Sbp::MsgPrintDep(msg) => WireFormat::write(msg, buf),
4714            Sbp::MsgTrackingStateDetailedDep(msg) => WireFormat::write(msg, buf),
4715            Sbp::MsgTrackingStateDepB(msg) => WireFormat::write(msg, buf),
4716            Sbp::MsgAcqResultDepB(msg) => WireFormat::write(msg, buf),
4717            Sbp::MsgAcqResultDepA(msg) => WireFormat::write(msg, buf),
4718            Sbp::MsgTrackingStateDepA(msg) => WireFormat::write(msg, buf),
4719            Sbp::MsgThreadState(msg) => WireFormat::write(msg, buf),
4720            Sbp::MsgUartStateDepa(msg) => WireFormat::write(msg, buf),
4721            Sbp::MsgIarState(msg) => WireFormat::write(msg, buf),
4722            Sbp::MsgEphemerisDepA(msg) => WireFormat::write(msg, buf),
4723            Sbp::MsgMaskSatelliteDep(msg) => WireFormat::write(msg, buf),
4724            Sbp::MsgTrackingIqDepA(msg) => WireFormat::write(msg, buf),
4725            Sbp::MsgUartState(msg) => WireFormat::write(msg, buf),
4726            Sbp::MsgAcqSvProfileDep(msg) => WireFormat::write(msg, buf),
4727            Sbp::MsgAcqResultDepC(msg) => WireFormat::write(msg, buf),
4728            Sbp::MsgTrackingStateDetailedDepA(msg) => WireFormat::write(msg, buf),
4729            Sbp::MsgResetFilters(msg) => WireFormat::write(msg, buf),
4730            Sbp::MsgInitBaseDep(msg) => WireFormat::write(msg, buf),
4731            Sbp::MsgMaskSatellite(msg) => WireFormat::write(msg, buf),
4732            Sbp::MsgTrackingIqDepB(msg) => WireFormat::write(msg, buf),
4733            Sbp::MsgTrackingIq(msg) => WireFormat::write(msg, buf),
4734            Sbp::MsgAcqSvProfile(msg) => WireFormat::write(msg, buf),
4735            Sbp::MsgAcqResult(msg) => WireFormat::write(msg, buf),
4736            Sbp::MsgTrackingState(msg) => WireFormat::write(msg, buf),
4737            Sbp::MsgObsDepB(msg) => WireFormat::write(msg, buf),
4738            Sbp::MsgBasePosLlh(msg) => WireFormat::write(msg, buf),
4739            Sbp::MsgObsDepA(msg) => WireFormat::write(msg, buf),
4740            Sbp::MsgEphemerisDepB(msg) => WireFormat::write(msg, buf),
4741            Sbp::MsgEphemerisDepC(msg) => WireFormat::write(msg, buf),
4742            Sbp::MsgBasePosEcef(msg) => WireFormat::write(msg, buf),
4743            Sbp::MsgObsDepC(msg) => WireFormat::write(msg, buf),
4744            Sbp::MsgObs(msg) => WireFormat::write(msg, buf),
4745            Sbp::MsgSpecanDep(msg) => WireFormat::write(msg, buf),
4746            Sbp::MsgSpecan(msg) => WireFormat::write(msg, buf),
4747            Sbp::MsgMeasurementState(msg) => WireFormat::write(msg, buf),
4748            Sbp::MsgSetTime(msg) => WireFormat::write(msg, buf),
4749            Sbp::MsgAlmanac(msg) => WireFormat::write(msg, buf),
4750            Sbp::MsgAlmanacGpsDep(msg) => WireFormat::write(msg, buf),
4751            Sbp::MsgAlmanacGloDep(msg) => WireFormat::write(msg, buf),
4752            Sbp::MsgAlmanacGps(msg) => WireFormat::write(msg, buf),
4753            Sbp::MsgAlmanacGlo(msg) => WireFormat::write(msg, buf),
4754            Sbp::MsgGloBiases(msg) => WireFormat::write(msg, buf),
4755            Sbp::MsgEphemerisDepD(msg) => WireFormat::write(msg, buf),
4756            Sbp::MsgEphemerisGpsDepE(msg) => WireFormat::write(msg, buf),
4757            Sbp::MsgEphemerisSbasDepA(msg) => WireFormat::write(msg, buf),
4758            Sbp::MsgEphemerisGloDepA(msg) => WireFormat::write(msg, buf),
4759            Sbp::MsgEphemerisSbasDepB(msg) => WireFormat::write(msg, buf),
4760            Sbp::MsgEphemerisGloDepB(msg) => WireFormat::write(msg, buf),
4761            Sbp::MsgEphemerisGpsDepF(msg) => WireFormat::write(msg, buf),
4762            Sbp::MsgEphemerisGloDepC(msg) => WireFormat::write(msg, buf),
4763            Sbp::MsgEphemerisGloDepD(msg) => WireFormat::write(msg, buf),
4764            Sbp::MsgEphemerisBds(msg) => WireFormat::write(msg, buf),
4765            Sbp::MsgEphemerisGps(msg) => WireFormat::write(msg, buf),
4766            Sbp::MsgEphemerisGlo(msg) => WireFormat::write(msg, buf),
4767            Sbp::MsgEphemerisSbas(msg) => WireFormat::write(msg, buf),
4768            Sbp::MsgEphemerisGal(msg) => WireFormat::write(msg, buf),
4769            Sbp::MsgEphemerisQzss(msg) => WireFormat::write(msg, buf),
4770            Sbp::MsgIono(msg) => WireFormat::write(msg, buf),
4771            Sbp::MsgSvConfigurationGpsDep(msg) => WireFormat::write(msg, buf),
4772            Sbp::MsgGroupDelayDepA(msg) => WireFormat::write(msg, buf),
4773            Sbp::MsgGroupDelayDepB(msg) => WireFormat::write(msg, buf),
4774            Sbp::MsgGroupDelay(msg) => WireFormat::write(msg, buf),
4775            Sbp::MsgEphemerisGalDepA(msg) => WireFormat::write(msg, buf),
4776            Sbp::MsgGnssCapb(msg) => WireFormat::write(msg, buf),
4777            Sbp::MsgSvAzEl(msg) => WireFormat::write(msg, buf),
4778            Sbp::MsgSettingsWrite(msg) => WireFormat::write(msg, buf),
4779            Sbp::MsgSettingsSave(msg) => WireFormat::write(msg, buf),
4780            Sbp::MsgSettingsReadByIndexReq(msg) => WireFormat::write(msg, buf),
4781            Sbp::MsgFileioReadResp(msg) => WireFormat::write(msg, buf),
4782            Sbp::MsgSettingsReadReq(msg) => WireFormat::write(msg, buf),
4783            Sbp::MsgSettingsReadResp(msg) => WireFormat::write(msg, buf),
4784            Sbp::MsgSettingsReadByIndexDone(msg) => WireFormat::write(msg, buf),
4785            Sbp::MsgSettingsReadByIndexResp(msg) => WireFormat::write(msg, buf),
4786            Sbp::MsgFileioReadReq(msg) => WireFormat::write(msg, buf),
4787            Sbp::MsgFileioReadDirReq(msg) => WireFormat::write(msg, buf),
4788            Sbp::MsgFileioReadDirResp(msg) => WireFormat::write(msg, buf),
4789            Sbp::MsgFileioWriteResp(msg) => WireFormat::write(msg, buf),
4790            Sbp::MsgFileioRemove(msg) => WireFormat::write(msg, buf),
4791            Sbp::MsgFileioWriteReq(msg) => WireFormat::write(msg, buf),
4792            Sbp::MsgSettingsRegister(msg) => WireFormat::write(msg, buf),
4793            Sbp::MsgSettingsWriteResp(msg) => WireFormat::write(msg, buf),
4794            Sbp::MsgBootloaderHandshakeDepA(msg) => WireFormat::write(msg, buf),
4795            Sbp::MsgBootloaderJumpToApp(msg) => WireFormat::write(msg, buf),
4796            Sbp::MsgResetDep(msg) => WireFormat::write(msg, buf),
4797            Sbp::MsgBootloaderHandshakeReq(msg) => WireFormat::write(msg, buf),
4798            Sbp::MsgBootloaderHandshakeResp(msg) => WireFormat::write(msg, buf),
4799            Sbp::MsgDeviceMonitor(msg) => WireFormat::write(msg, buf),
4800            Sbp::MsgReset(msg) => WireFormat::write(msg, buf),
4801            Sbp::MsgCommandReq(msg) => WireFormat::write(msg, buf),
4802            Sbp::MsgCommandResp(msg) => WireFormat::write(msg, buf),
4803            Sbp::MsgNetworkStateReq(msg) => WireFormat::write(msg, buf),
4804            Sbp::MsgNetworkStateResp(msg) => WireFormat::write(msg, buf),
4805            Sbp::MsgCommandOutput(msg) => WireFormat::write(msg, buf),
4806            Sbp::MsgNetworkBandwidthUsage(msg) => WireFormat::write(msg, buf),
4807            Sbp::MsgCellModemStatus(msg) => WireFormat::write(msg, buf),
4808            Sbp::MsgFrontEndGain(msg) => WireFormat::write(msg, buf),
4809            Sbp::MsgCwResults(msg) => WireFormat::write(msg, buf),
4810            Sbp::MsgCwStart(msg) => WireFormat::write(msg, buf),
4811            Sbp::MsgNapDeviceDnaResp(msg) => WireFormat::write(msg, buf),
4812            Sbp::MsgNapDeviceDnaReq(msg) => WireFormat::write(msg, buf),
4813            Sbp::MsgFlashDone(msg) => WireFormat::write(msg, buf),
4814            Sbp::MsgFlashReadResp(msg) => WireFormat::write(msg, buf),
4815            Sbp::MsgFlashErase(msg) => WireFormat::write(msg, buf),
4816            Sbp::MsgStmFlashLockSector(msg) => WireFormat::write(msg, buf),
4817            Sbp::MsgStmFlashUnlockSector(msg) => WireFormat::write(msg, buf),
4818            Sbp::MsgStmUniqueIdResp(msg) => WireFormat::write(msg, buf),
4819            Sbp::MsgFlashProgram(msg) => WireFormat::write(msg, buf),
4820            Sbp::MsgFlashReadReq(msg) => WireFormat::write(msg, buf),
4821            Sbp::MsgStmUniqueIdReq(msg) => WireFormat::write(msg, buf),
4822            Sbp::MsgM25FlashWriteStatus(msg) => WireFormat::write(msg, buf),
4823            Sbp::MsgGpsTimeDepA(msg) => WireFormat::write(msg, buf),
4824            Sbp::MsgExtEvent(msg) => WireFormat::write(msg, buf),
4825            Sbp::MsgGpsTime(msg) => WireFormat::write(msg, buf),
4826            Sbp::MsgUtcTime(msg) => WireFormat::write(msg, buf),
4827            Sbp::MsgGpsTimeGnss(msg) => WireFormat::write(msg, buf),
4828            Sbp::MsgUtcTimeGnss(msg) => WireFormat::write(msg, buf),
4829            Sbp::MsgTelSv(msg) => WireFormat::write(msg, buf),
4830            Sbp::MsgSettingsRegisterResp(msg) => WireFormat::write(msg, buf),
4831            Sbp::MsgPosEcefDepA(msg) => WireFormat::write(msg, buf),
4832            Sbp::MsgPosLlhDepA(msg) => WireFormat::write(msg, buf),
4833            Sbp::MsgBaselineEcefDepA(msg) => WireFormat::write(msg, buf),
4834            Sbp::MsgBaselineNedDepA(msg) => WireFormat::write(msg, buf),
4835            Sbp::MsgVelEcefDepA(msg) => WireFormat::write(msg, buf),
4836            Sbp::MsgVelNedDepA(msg) => WireFormat::write(msg, buf),
4837            Sbp::MsgDopsDepA(msg) => WireFormat::write(msg, buf),
4838            Sbp::MsgBaselineHeadingDepA(msg) => WireFormat::write(msg, buf),
4839            Sbp::MsgDops(msg) => WireFormat::write(msg, buf),
4840            Sbp::MsgPosEcef(msg) => WireFormat::write(msg, buf),
4841            Sbp::MsgPosLlh(msg) => WireFormat::write(msg, buf),
4842            Sbp::MsgBaselineEcef(msg) => WireFormat::write(msg, buf),
4843            Sbp::MsgBaselineNed(msg) => WireFormat::write(msg, buf),
4844            Sbp::MsgVelEcef(msg) => WireFormat::write(msg, buf),
4845            Sbp::MsgVelNed(msg) => WireFormat::write(msg, buf),
4846            Sbp::MsgBaselineHeading(msg) => WireFormat::write(msg, buf),
4847            Sbp::MsgAgeCorrections(msg) => WireFormat::write(msg, buf),
4848            Sbp::MsgPosLlhCov(msg) => WireFormat::write(msg, buf),
4849            Sbp::MsgVelNedCov(msg) => WireFormat::write(msg, buf),
4850            Sbp::MsgVelBody(msg) => WireFormat::write(msg, buf),
4851            Sbp::MsgPosEcefCov(msg) => WireFormat::write(msg, buf),
4852            Sbp::MsgVelEcefCov(msg) => WireFormat::write(msg, buf),
4853            Sbp::MsgProtectionLevelDepA(msg) => WireFormat::write(msg, buf),
4854            Sbp::MsgProtectionLevel(msg) => WireFormat::write(msg, buf),
4855            Sbp::MsgPosLlhAcc(msg) => WireFormat::write(msg, buf),
4856            Sbp::MsgVelCog(msg) => WireFormat::write(msg, buf),
4857            Sbp::MsgOrientQuat(msg) => WireFormat::write(msg, buf),
4858            Sbp::MsgOrientEuler(msg) => WireFormat::write(msg, buf),
4859            Sbp::MsgAngularRate(msg) => WireFormat::write(msg, buf),
4860            Sbp::MsgPosEcefGnss(msg) => WireFormat::write(msg, buf),
4861            Sbp::MsgPosLlhGnss(msg) => WireFormat::write(msg, buf),
4862            Sbp::MsgVelEcefGnss(msg) => WireFormat::write(msg, buf),
4863            Sbp::MsgVelNedGnss(msg) => WireFormat::write(msg, buf),
4864            Sbp::MsgPosLlhCovGnss(msg) => WireFormat::write(msg, buf),
4865            Sbp::MsgVelNedCovGnss(msg) => WireFormat::write(msg, buf),
4866            Sbp::MsgPosEcefCovGnss(msg) => WireFormat::write(msg, buf),
4867            Sbp::MsgVelEcefCovGnss(msg) => WireFormat::write(msg, buf),
4868            Sbp::MsgUtcLeapSecond(msg) => WireFormat::write(msg, buf),
4869            Sbp::MsgReferenceFrameParam(msg) => WireFormat::write(msg, buf),
4870            Sbp::MsgPoseRelative(msg) => WireFormat::write(msg, buf),
4871            Sbp::MsgNdbEvent(msg) => WireFormat::write(msg, buf),
4872            Sbp::MsgLog(msg) => WireFormat::write(msg, buf),
4873            Sbp::MsgFwd(msg) => WireFormat::write(msg, buf),
4874            Sbp::MsgSsrOrbitClockDepA(msg) => WireFormat::write(msg, buf),
4875            Sbp::MsgSsrOrbitClock(msg) => WireFormat::write(msg, buf),
4876            Sbp::MsgSsrOrbitClockBounds(msg) => WireFormat::write(msg, buf),
4877            Sbp::MsgSsrOrbitClockBoundsDegradation(msg) => WireFormat::write(msg, buf),
4878            Sbp::MsgSsrCodeBiases(msg) => WireFormat::write(msg, buf),
4879            Sbp::MsgSsrPhaseBiases(msg) => WireFormat::write(msg, buf),
4880            Sbp::MsgSsrStecCorrectionDepA(msg) => WireFormat::write(msg, buf),
4881            Sbp::MsgSsrCodePhaseBiasesBounds(msg) => WireFormat::write(msg, buf),
4882            Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => WireFormat::write(msg, buf),
4883            Sbp::MsgSsrGridDefinitionDepA(msg) => WireFormat::write(msg, buf),
4884            Sbp::MsgSsrTileDefinitionDepA(msg) => WireFormat::write(msg, buf),
4885            Sbp::MsgSsrTileDefinitionDepB(msg) => WireFormat::write(msg, buf),
4886            Sbp::MsgSsrTileDefinition(msg) => WireFormat::write(msg, buf),
4887            Sbp::MsgSsrGriddedCorrectionDepA(msg) => WireFormat::write(msg, buf),
4888            Sbp::MsgSsrStecCorrectionDep(msg) => WireFormat::write(msg, buf),
4889            Sbp::MsgSsrGriddedCorrection(msg) => WireFormat::write(msg, buf),
4890            Sbp::MsgSsrStecCorrection(msg) => WireFormat::write(msg, buf),
4891            Sbp::MsgSsrGriddedCorrectionBounds(msg) => WireFormat::write(msg, buf),
4892            Sbp::MsgSsrSatelliteApcDep(msg) => WireFormat::write(msg, buf),
4893            Sbp::MsgSsrSatelliteApc(msg) => WireFormat::write(msg, buf),
4894            Sbp::MsgOsr(msg) => WireFormat::write(msg, buf),
4895            Sbp::MsgUserData(msg) => WireFormat::write(msg, buf),
4896            Sbp::MsgImuRaw(msg) => WireFormat::write(msg, buf),
4897            Sbp::MsgImuAux(msg) => WireFormat::write(msg, buf),
4898            Sbp::MsgMagRaw(msg) => WireFormat::write(msg, buf),
4899            Sbp::MsgOdometry(msg) => WireFormat::write(msg, buf),
4900            Sbp::MsgWheeltick(msg) => WireFormat::write(msg, buf),
4901            Sbp::MsgImuComp(msg) => WireFormat::write(msg, buf),
4902            Sbp::MsgSsrFlagHighLevelDepA(msg) => WireFormat::write(msg, buf),
4903            Sbp::MsgSsrFlagHighLevel(msg) => WireFormat::write(msg, buf),
4904            Sbp::MsgSsrFlagSatellites(msg) => WireFormat::write(msg, buf),
4905            Sbp::MsgSsrFlagTropoGridPoints(msg) => WireFormat::write(msg, buf),
4906            Sbp::MsgSsrFlagIonoGridPoints(msg) => WireFormat::write(msg, buf),
4907            Sbp::MsgSsrFlagIonoTileSatLos(msg) => WireFormat::write(msg, buf),
4908            Sbp::MsgSsrFlagIonoGridPointSatLos(msg) => WireFormat::write(msg, buf),
4909            Sbp::MsgAcknowledge(msg) => WireFormat::write(msg, buf),
4910            Sbp::MsgEd25519SignatureDepA(msg) => WireFormat::write(msg, buf),
4911            Sbp::MsgEd25519CertificateDep(msg) => WireFormat::write(msg, buf),
4912            Sbp::MsgEd25519SignatureDepB(msg) => WireFormat::write(msg, buf),
4913            Sbp::MsgEcdsaCertificate(msg) => WireFormat::write(msg, buf),
4914            Sbp::MsgCertificateChainDep(msg) => WireFormat::write(msg, buf),
4915            Sbp::MsgEcdsaSignatureDepA(msg) => WireFormat::write(msg, buf),
4916            Sbp::MsgEcdsaSignatureDepB(msg) => WireFormat::write(msg, buf),
4917            Sbp::MsgEcdsaSignature(msg) => WireFormat::write(msg, buf),
4918            Sbp::MsgCertificateChain(msg) => WireFormat::write(msg, buf),
4919            Sbp::MsgAesCmacSignature(msg) => WireFormat::write(msg, buf),
4920            Sbp::MsgFileioConfigReq(msg) => WireFormat::write(msg, buf),
4921            Sbp::MsgFileioConfigResp(msg) => WireFormat::write(msg, buf),
4922            Sbp::MsgSbasRaw(msg) => WireFormat::write(msg, buf),
4923            Sbp::MsgLinuxCpuStateDepA(msg) => WireFormat::write(msg, buf),
4924            Sbp::MsgLinuxMemStateDepA(msg) => WireFormat::write(msg, buf),
4925            Sbp::MsgLinuxSysStateDepA(msg) => WireFormat::write(msg, buf),
4926            Sbp::MsgLinuxProcessSocketCounts(msg) => WireFormat::write(msg, buf),
4927            Sbp::MsgLinuxProcessSocketQueues(msg) => WireFormat::write(msg, buf),
4928            Sbp::MsgLinuxSocketUsage(msg) => WireFormat::write(msg, buf),
4929            Sbp::MsgLinuxProcessFdCount(msg) => WireFormat::write(msg, buf),
4930            Sbp::MsgLinuxProcessFdSummary(msg) => WireFormat::write(msg, buf),
4931            Sbp::MsgLinuxCpuState(msg) => WireFormat::write(msg, buf),
4932            Sbp::MsgLinuxMemState(msg) => WireFormat::write(msg, buf),
4933            Sbp::MsgLinuxSysState(msg) => WireFormat::write(msg, buf),
4934            Sbp::MsgMeasurementPoint(msg) => WireFormat::write(msg, buf),
4935            Sbp::MsgProfilingSystemInfo(msg) => WireFormat::write(msg, buf),
4936            Sbp::MsgProfilingThreadInfo(msg) => WireFormat::write(msg, buf),
4937            Sbp::MsgProfilingResourceCounter(msg) => WireFormat::write(msg, buf),
4938            Sbp::MsgStartup(msg) => WireFormat::write(msg, buf),
4939            Sbp::MsgDgnssStatus(msg) => WireFormat::write(msg, buf),
4940            Sbp::MsgInsStatus(msg) => WireFormat::write(msg, buf),
4941            Sbp::MsgCsacTelemetry(msg) => WireFormat::write(msg, buf),
4942            Sbp::MsgCsacTelemetryLabels(msg) => WireFormat::write(msg, buf),
4943            Sbp::MsgInsUpdates(msg) => WireFormat::write(msg, buf),
4944            Sbp::MsgGnssTimeOffset(msg) => WireFormat::write(msg, buf),
4945            Sbp::MsgPpsTime(msg) => WireFormat::write(msg, buf),
4946            Sbp::MsgSensorAidEvent(msg) => WireFormat::write(msg, buf),
4947            Sbp::MsgGroupMeta(msg) => WireFormat::write(msg, buf),
4948            Sbp::MsgSolnMeta(msg) => WireFormat::write(msg, buf),
4949            Sbp::MsgSolnMetaDepA(msg) => WireFormat::write(msg, buf),
4950            Sbp::MsgStatusJournal(msg) => WireFormat::write(msg, buf),
4951            Sbp::MsgStatusReport(msg) => WireFormat::write(msg, buf),
4952            Sbp::MsgHeartbeat(msg) => WireFormat::write(msg, buf),
4953            Sbp::Unknown(msg) => WireFormat::write(msg, buf),
4954            Sbp::Invalid(msg) => WireFormat::write(msg, buf),
4955        }
4956    }
4957
4958    fn len(&self) -> usize {
4959        match self {
4960            Sbp::MsgPrintDep(msg) => WireFormat::len(msg),
4961            Sbp::MsgTrackingStateDetailedDep(msg) => WireFormat::len(msg),
4962            Sbp::MsgTrackingStateDepB(msg) => WireFormat::len(msg),
4963            Sbp::MsgAcqResultDepB(msg) => WireFormat::len(msg),
4964            Sbp::MsgAcqResultDepA(msg) => WireFormat::len(msg),
4965            Sbp::MsgTrackingStateDepA(msg) => WireFormat::len(msg),
4966            Sbp::MsgThreadState(msg) => WireFormat::len(msg),
4967            Sbp::MsgUartStateDepa(msg) => WireFormat::len(msg),
4968            Sbp::MsgIarState(msg) => WireFormat::len(msg),
4969            Sbp::MsgEphemerisDepA(msg) => WireFormat::len(msg),
4970            Sbp::MsgMaskSatelliteDep(msg) => WireFormat::len(msg),
4971            Sbp::MsgTrackingIqDepA(msg) => WireFormat::len(msg),
4972            Sbp::MsgUartState(msg) => WireFormat::len(msg),
4973            Sbp::MsgAcqSvProfileDep(msg) => WireFormat::len(msg),
4974            Sbp::MsgAcqResultDepC(msg) => WireFormat::len(msg),
4975            Sbp::MsgTrackingStateDetailedDepA(msg) => WireFormat::len(msg),
4976            Sbp::MsgResetFilters(msg) => WireFormat::len(msg),
4977            Sbp::MsgInitBaseDep(msg) => WireFormat::len(msg),
4978            Sbp::MsgMaskSatellite(msg) => WireFormat::len(msg),
4979            Sbp::MsgTrackingIqDepB(msg) => WireFormat::len(msg),
4980            Sbp::MsgTrackingIq(msg) => WireFormat::len(msg),
4981            Sbp::MsgAcqSvProfile(msg) => WireFormat::len(msg),
4982            Sbp::MsgAcqResult(msg) => WireFormat::len(msg),
4983            Sbp::MsgTrackingState(msg) => WireFormat::len(msg),
4984            Sbp::MsgObsDepB(msg) => WireFormat::len(msg),
4985            Sbp::MsgBasePosLlh(msg) => WireFormat::len(msg),
4986            Sbp::MsgObsDepA(msg) => WireFormat::len(msg),
4987            Sbp::MsgEphemerisDepB(msg) => WireFormat::len(msg),
4988            Sbp::MsgEphemerisDepC(msg) => WireFormat::len(msg),
4989            Sbp::MsgBasePosEcef(msg) => WireFormat::len(msg),
4990            Sbp::MsgObsDepC(msg) => WireFormat::len(msg),
4991            Sbp::MsgObs(msg) => WireFormat::len(msg),
4992            Sbp::MsgSpecanDep(msg) => WireFormat::len(msg),
4993            Sbp::MsgSpecan(msg) => WireFormat::len(msg),
4994            Sbp::MsgMeasurementState(msg) => WireFormat::len(msg),
4995            Sbp::MsgSetTime(msg) => WireFormat::len(msg),
4996            Sbp::MsgAlmanac(msg) => WireFormat::len(msg),
4997            Sbp::MsgAlmanacGpsDep(msg) => WireFormat::len(msg),
4998            Sbp::MsgAlmanacGloDep(msg) => WireFormat::len(msg),
4999            Sbp::MsgAlmanacGps(msg) => WireFormat::len(msg),
5000            Sbp::MsgAlmanacGlo(msg) => WireFormat::len(msg),
5001            Sbp::MsgGloBiases(msg) => WireFormat::len(msg),
5002            Sbp::MsgEphemerisDepD(msg) => WireFormat::len(msg),
5003            Sbp::MsgEphemerisGpsDepE(msg) => WireFormat::len(msg),
5004            Sbp::MsgEphemerisSbasDepA(msg) => WireFormat::len(msg),
5005            Sbp::MsgEphemerisGloDepA(msg) => WireFormat::len(msg),
5006            Sbp::MsgEphemerisSbasDepB(msg) => WireFormat::len(msg),
5007            Sbp::MsgEphemerisGloDepB(msg) => WireFormat::len(msg),
5008            Sbp::MsgEphemerisGpsDepF(msg) => WireFormat::len(msg),
5009            Sbp::MsgEphemerisGloDepC(msg) => WireFormat::len(msg),
5010            Sbp::MsgEphemerisGloDepD(msg) => WireFormat::len(msg),
5011            Sbp::MsgEphemerisBds(msg) => WireFormat::len(msg),
5012            Sbp::MsgEphemerisGps(msg) => WireFormat::len(msg),
5013            Sbp::MsgEphemerisGlo(msg) => WireFormat::len(msg),
5014            Sbp::MsgEphemerisSbas(msg) => WireFormat::len(msg),
5015            Sbp::MsgEphemerisGal(msg) => WireFormat::len(msg),
5016            Sbp::MsgEphemerisQzss(msg) => WireFormat::len(msg),
5017            Sbp::MsgIono(msg) => WireFormat::len(msg),
5018            Sbp::MsgSvConfigurationGpsDep(msg) => WireFormat::len(msg),
5019            Sbp::MsgGroupDelayDepA(msg) => WireFormat::len(msg),
5020            Sbp::MsgGroupDelayDepB(msg) => WireFormat::len(msg),
5021            Sbp::MsgGroupDelay(msg) => WireFormat::len(msg),
5022            Sbp::MsgEphemerisGalDepA(msg) => WireFormat::len(msg),
5023            Sbp::MsgGnssCapb(msg) => WireFormat::len(msg),
5024            Sbp::MsgSvAzEl(msg) => WireFormat::len(msg),
5025            Sbp::MsgSettingsWrite(msg) => WireFormat::len(msg),
5026            Sbp::MsgSettingsSave(msg) => WireFormat::len(msg),
5027            Sbp::MsgSettingsReadByIndexReq(msg) => WireFormat::len(msg),
5028            Sbp::MsgFileioReadResp(msg) => WireFormat::len(msg),
5029            Sbp::MsgSettingsReadReq(msg) => WireFormat::len(msg),
5030            Sbp::MsgSettingsReadResp(msg) => WireFormat::len(msg),
5031            Sbp::MsgSettingsReadByIndexDone(msg) => WireFormat::len(msg),
5032            Sbp::MsgSettingsReadByIndexResp(msg) => WireFormat::len(msg),
5033            Sbp::MsgFileioReadReq(msg) => WireFormat::len(msg),
5034            Sbp::MsgFileioReadDirReq(msg) => WireFormat::len(msg),
5035            Sbp::MsgFileioReadDirResp(msg) => WireFormat::len(msg),
5036            Sbp::MsgFileioWriteResp(msg) => WireFormat::len(msg),
5037            Sbp::MsgFileioRemove(msg) => WireFormat::len(msg),
5038            Sbp::MsgFileioWriteReq(msg) => WireFormat::len(msg),
5039            Sbp::MsgSettingsRegister(msg) => WireFormat::len(msg),
5040            Sbp::MsgSettingsWriteResp(msg) => WireFormat::len(msg),
5041            Sbp::MsgBootloaderHandshakeDepA(msg) => WireFormat::len(msg),
5042            Sbp::MsgBootloaderJumpToApp(msg) => WireFormat::len(msg),
5043            Sbp::MsgResetDep(msg) => WireFormat::len(msg),
5044            Sbp::MsgBootloaderHandshakeReq(msg) => WireFormat::len(msg),
5045            Sbp::MsgBootloaderHandshakeResp(msg) => WireFormat::len(msg),
5046            Sbp::MsgDeviceMonitor(msg) => WireFormat::len(msg),
5047            Sbp::MsgReset(msg) => WireFormat::len(msg),
5048            Sbp::MsgCommandReq(msg) => WireFormat::len(msg),
5049            Sbp::MsgCommandResp(msg) => WireFormat::len(msg),
5050            Sbp::MsgNetworkStateReq(msg) => WireFormat::len(msg),
5051            Sbp::MsgNetworkStateResp(msg) => WireFormat::len(msg),
5052            Sbp::MsgCommandOutput(msg) => WireFormat::len(msg),
5053            Sbp::MsgNetworkBandwidthUsage(msg) => WireFormat::len(msg),
5054            Sbp::MsgCellModemStatus(msg) => WireFormat::len(msg),
5055            Sbp::MsgFrontEndGain(msg) => WireFormat::len(msg),
5056            Sbp::MsgCwResults(msg) => WireFormat::len(msg),
5057            Sbp::MsgCwStart(msg) => WireFormat::len(msg),
5058            Sbp::MsgNapDeviceDnaResp(msg) => WireFormat::len(msg),
5059            Sbp::MsgNapDeviceDnaReq(msg) => WireFormat::len(msg),
5060            Sbp::MsgFlashDone(msg) => WireFormat::len(msg),
5061            Sbp::MsgFlashReadResp(msg) => WireFormat::len(msg),
5062            Sbp::MsgFlashErase(msg) => WireFormat::len(msg),
5063            Sbp::MsgStmFlashLockSector(msg) => WireFormat::len(msg),
5064            Sbp::MsgStmFlashUnlockSector(msg) => WireFormat::len(msg),
5065            Sbp::MsgStmUniqueIdResp(msg) => WireFormat::len(msg),
5066            Sbp::MsgFlashProgram(msg) => WireFormat::len(msg),
5067            Sbp::MsgFlashReadReq(msg) => WireFormat::len(msg),
5068            Sbp::MsgStmUniqueIdReq(msg) => WireFormat::len(msg),
5069            Sbp::MsgM25FlashWriteStatus(msg) => WireFormat::len(msg),
5070            Sbp::MsgGpsTimeDepA(msg) => WireFormat::len(msg),
5071            Sbp::MsgExtEvent(msg) => WireFormat::len(msg),
5072            Sbp::MsgGpsTime(msg) => WireFormat::len(msg),
5073            Sbp::MsgUtcTime(msg) => WireFormat::len(msg),
5074            Sbp::MsgGpsTimeGnss(msg) => WireFormat::len(msg),
5075            Sbp::MsgUtcTimeGnss(msg) => WireFormat::len(msg),
5076            Sbp::MsgTelSv(msg) => WireFormat::len(msg),
5077            Sbp::MsgSettingsRegisterResp(msg) => WireFormat::len(msg),
5078            Sbp::MsgPosEcefDepA(msg) => WireFormat::len(msg),
5079            Sbp::MsgPosLlhDepA(msg) => WireFormat::len(msg),
5080            Sbp::MsgBaselineEcefDepA(msg) => WireFormat::len(msg),
5081            Sbp::MsgBaselineNedDepA(msg) => WireFormat::len(msg),
5082            Sbp::MsgVelEcefDepA(msg) => WireFormat::len(msg),
5083            Sbp::MsgVelNedDepA(msg) => WireFormat::len(msg),
5084            Sbp::MsgDopsDepA(msg) => WireFormat::len(msg),
5085            Sbp::MsgBaselineHeadingDepA(msg) => WireFormat::len(msg),
5086            Sbp::MsgDops(msg) => WireFormat::len(msg),
5087            Sbp::MsgPosEcef(msg) => WireFormat::len(msg),
5088            Sbp::MsgPosLlh(msg) => WireFormat::len(msg),
5089            Sbp::MsgBaselineEcef(msg) => WireFormat::len(msg),
5090            Sbp::MsgBaselineNed(msg) => WireFormat::len(msg),
5091            Sbp::MsgVelEcef(msg) => WireFormat::len(msg),
5092            Sbp::MsgVelNed(msg) => WireFormat::len(msg),
5093            Sbp::MsgBaselineHeading(msg) => WireFormat::len(msg),
5094            Sbp::MsgAgeCorrections(msg) => WireFormat::len(msg),
5095            Sbp::MsgPosLlhCov(msg) => WireFormat::len(msg),
5096            Sbp::MsgVelNedCov(msg) => WireFormat::len(msg),
5097            Sbp::MsgVelBody(msg) => WireFormat::len(msg),
5098            Sbp::MsgPosEcefCov(msg) => WireFormat::len(msg),
5099            Sbp::MsgVelEcefCov(msg) => WireFormat::len(msg),
5100            Sbp::MsgProtectionLevelDepA(msg) => WireFormat::len(msg),
5101            Sbp::MsgProtectionLevel(msg) => WireFormat::len(msg),
5102            Sbp::MsgPosLlhAcc(msg) => WireFormat::len(msg),
5103            Sbp::MsgVelCog(msg) => WireFormat::len(msg),
5104            Sbp::MsgOrientQuat(msg) => WireFormat::len(msg),
5105            Sbp::MsgOrientEuler(msg) => WireFormat::len(msg),
5106            Sbp::MsgAngularRate(msg) => WireFormat::len(msg),
5107            Sbp::MsgPosEcefGnss(msg) => WireFormat::len(msg),
5108            Sbp::MsgPosLlhGnss(msg) => WireFormat::len(msg),
5109            Sbp::MsgVelEcefGnss(msg) => WireFormat::len(msg),
5110            Sbp::MsgVelNedGnss(msg) => WireFormat::len(msg),
5111            Sbp::MsgPosLlhCovGnss(msg) => WireFormat::len(msg),
5112            Sbp::MsgVelNedCovGnss(msg) => WireFormat::len(msg),
5113            Sbp::MsgPosEcefCovGnss(msg) => WireFormat::len(msg),
5114            Sbp::MsgVelEcefCovGnss(msg) => WireFormat::len(msg),
5115            Sbp::MsgUtcLeapSecond(msg) => WireFormat::len(msg),
5116            Sbp::MsgReferenceFrameParam(msg) => WireFormat::len(msg),
5117            Sbp::MsgPoseRelative(msg) => WireFormat::len(msg),
5118            Sbp::MsgNdbEvent(msg) => WireFormat::len(msg),
5119            Sbp::MsgLog(msg) => WireFormat::len(msg),
5120            Sbp::MsgFwd(msg) => WireFormat::len(msg),
5121            Sbp::MsgSsrOrbitClockDepA(msg) => WireFormat::len(msg),
5122            Sbp::MsgSsrOrbitClock(msg) => WireFormat::len(msg),
5123            Sbp::MsgSsrOrbitClockBounds(msg) => WireFormat::len(msg),
5124            Sbp::MsgSsrOrbitClockBoundsDegradation(msg) => WireFormat::len(msg),
5125            Sbp::MsgSsrCodeBiases(msg) => WireFormat::len(msg),
5126            Sbp::MsgSsrPhaseBiases(msg) => WireFormat::len(msg),
5127            Sbp::MsgSsrStecCorrectionDepA(msg) => WireFormat::len(msg),
5128            Sbp::MsgSsrCodePhaseBiasesBounds(msg) => WireFormat::len(msg),
5129            Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => WireFormat::len(msg),
5130            Sbp::MsgSsrGridDefinitionDepA(msg) => WireFormat::len(msg),
5131            Sbp::MsgSsrTileDefinitionDepA(msg) => WireFormat::len(msg),
5132            Sbp::MsgSsrTileDefinitionDepB(msg) => WireFormat::len(msg),
5133            Sbp::MsgSsrTileDefinition(msg) => WireFormat::len(msg),
5134            Sbp::MsgSsrGriddedCorrectionDepA(msg) => WireFormat::len(msg),
5135            Sbp::MsgSsrStecCorrectionDep(msg) => WireFormat::len(msg),
5136            Sbp::MsgSsrGriddedCorrection(msg) => WireFormat::len(msg),
5137            Sbp::MsgSsrStecCorrection(msg) => WireFormat::len(msg),
5138            Sbp::MsgSsrGriddedCorrectionBounds(msg) => WireFormat::len(msg),
5139            Sbp::MsgSsrSatelliteApcDep(msg) => WireFormat::len(msg),
5140            Sbp::MsgSsrSatelliteApc(msg) => WireFormat::len(msg),
5141            Sbp::MsgOsr(msg) => WireFormat::len(msg),
5142            Sbp::MsgUserData(msg) => WireFormat::len(msg),
5143            Sbp::MsgImuRaw(msg) => WireFormat::len(msg),
5144            Sbp::MsgImuAux(msg) => WireFormat::len(msg),
5145            Sbp::MsgMagRaw(msg) => WireFormat::len(msg),
5146            Sbp::MsgOdometry(msg) => WireFormat::len(msg),
5147            Sbp::MsgWheeltick(msg) => WireFormat::len(msg),
5148            Sbp::MsgImuComp(msg) => WireFormat::len(msg),
5149            Sbp::MsgSsrFlagHighLevelDepA(msg) => WireFormat::len(msg),
5150            Sbp::MsgSsrFlagHighLevel(msg) => WireFormat::len(msg),
5151            Sbp::MsgSsrFlagSatellites(msg) => WireFormat::len(msg),
5152            Sbp::MsgSsrFlagTropoGridPoints(msg) => WireFormat::len(msg),
5153            Sbp::MsgSsrFlagIonoGridPoints(msg) => WireFormat::len(msg),
5154            Sbp::MsgSsrFlagIonoTileSatLos(msg) => WireFormat::len(msg),
5155            Sbp::MsgSsrFlagIonoGridPointSatLos(msg) => WireFormat::len(msg),
5156            Sbp::MsgAcknowledge(msg) => WireFormat::len(msg),
5157            Sbp::MsgEd25519SignatureDepA(msg) => WireFormat::len(msg),
5158            Sbp::MsgEd25519CertificateDep(msg) => WireFormat::len(msg),
5159            Sbp::MsgEd25519SignatureDepB(msg) => WireFormat::len(msg),
5160            Sbp::MsgEcdsaCertificate(msg) => WireFormat::len(msg),
5161            Sbp::MsgCertificateChainDep(msg) => WireFormat::len(msg),
5162            Sbp::MsgEcdsaSignatureDepA(msg) => WireFormat::len(msg),
5163            Sbp::MsgEcdsaSignatureDepB(msg) => WireFormat::len(msg),
5164            Sbp::MsgEcdsaSignature(msg) => WireFormat::len(msg),
5165            Sbp::MsgCertificateChain(msg) => WireFormat::len(msg),
5166            Sbp::MsgAesCmacSignature(msg) => WireFormat::len(msg),
5167            Sbp::MsgFileioConfigReq(msg) => WireFormat::len(msg),
5168            Sbp::MsgFileioConfigResp(msg) => WireFormat::len(msg),
5169            Sbp::MsgSbasRaw(msg) => WireFormat::len(msg),
5170            Sbp::MsgLinuxCpuStateDepA(msg) => WireFormat::len(msg),
5171            Sbp::MsgLinuxMemStateDepA(msg) => WireFormat::len(msg),
5172            Sbp::MsgLinuxSysStateDepA(msg) => WireFormat::len(msg),
5173            Sbp::MsgLinuxProcessSocketCounts(msg) => WireFormat::len(msg),
5174            Sbp::MsgLinuxProcessSocketQueues(msg) => WireFormat::len(msg),
5175            Sbp::MsgLinuxSocketUsage(msg) => WireFormat::len(msg),
5176            Sbp::MsgLinuxProcessFdCount(msg) => WireFormat::len(msg),
5177            Sbp::MsgLinuxProcessFdSummary(msg) => WireFormat::len(msg),
5178            Sbp::MsgLinuxCpuState(msg) => WireFormat::len(msg),
5179            Sbp::MsgLinuxMemState(msg) => WireFormat::len(msg),
5180            Sbp::MsgLinuxSysState(msg) => WireFormat::len(msg),
5181            Sbp::MsgMeasurementPoint(msg) => WireFormat::len(msg),
5182            Sbp::MsgProfilingSystemInfo(msg) => WireFormat::len(msg),
5183            Sbp::MsgProfilingThreadInfo(msg) => WireFormat::len(msg),
5184            Sbp::MsgProfilingResourceCounter(msg) => WireFormat::len(msg),
5185            Sbp::MsgStartup(msg) => WireFormat::len(msg),
5186            Sbp::MsgDgnssStatus(msg) => WireFormat::len(msg),
5187            Sbp::MsgInsStatus(msg) => WireFormat::len(msg),
5188            Sbp::MsgCsacTelemetry(msg) => WireFormat::len(msg),
5189            Sbp::MsgCsacTelemetryLabels(msg) => WireFormat::len(msg),
5190            Sbp::MsgInsUpdates(msg) => WireFormat::len(msg),
5191            Sbp::MsgGnssTimeOffset(msg) => WireFormat::len(msg),
5192            Sbp::MsgPpsTime(msg) => WireFormat::len(msg),
5193            Sbp::MsgSensorAidEvent(msg) => WireFormat::len(msg),
5194            Sbp::MsgGroupMeta(msg) => WireFormat::len(msg),
5195            Sbp::MsgSolnMeta(msg) => WireFormat::len(msg),
5196            Sbp::MsgSolnMetaDepA(msg) => WireFormat::len(msg),
5197            Sbp::MsgStatusJournal(msg) => WireFormat::len(msg),
5198            Sbp::MsgStatusReport(msg) => WireFormat::len(msg),
5199            Sbp::MsgHeartbeat(msg) => WireFormat::len(msg),
5200            Sbp::Unknown(msg) => WireFormat::len(msg),
5201            Sbp::Invalid(msg) => WireFormat::len(msg),
5202        }
5203    }
5204}
5205
5206impl From<MsgPrintDep> for Sbp {
5207    fn from(msg: MsgPrintDep) -> Self {
5208        Sbp::MsgPrintDep(msg)
5209    }
5210}
5211
5212impl From<MsgTrackingStateDetailedDep> for Sbp {
5213    fn from(msg: MsgTrackingStateDetailedDep) -> Self {
5214        Sbp::MsgTrackingStateDetailedDep(msg)
5215    }
5216}
5217
5218impl From<MsgTrackingStateDepB> for Sbp {
5219    fn from(msg: MsgTrackingStateDepB) -> Self {
5220        Sbp::MsgTrackingStateDepB(msg)
5221    }
5222}
5223
5224impl From<MsgAcqResultDepB> for Sbp {
5225    fn from(msg: MsgAcqResultDepB) -> Self {
5226        Sbp::MsgAcqResultDepB(msg)
5227    }
5228}
5229
5230impl From<MsgAcqResultDepA> for Sbp {
5231    fn from(msg: MsgAcqResultDepA) -> Self {
5232        Sbp::MsgAcqResultDepA(msg)
5233    }
5234}
5235
5236impl From<MsgTrackingStateDepA> for Sbp {
5237    fn from(msg: MsgTrackingStateDepA) -> Self {
5238        Sbp::MsgTrackingStateDepA(msg)
5239    }
5240}
5241
5242impl From<MsgThreadState> for Sbp {
5243    fn from(msg: MsgThreadState) -> Self {
5244        Sbp::MsgThreadState(msg)
5245    }
5246}
5247
5248impl From<MsgUartStateDepa> for Sbp {
5249    fn from(msg: MsgUartStateDepa) -> Self {
5250        Sbp::MsgUartStateDepa(msg)
5251    }
5252}
5253
5254impl From<MsgIarState> for Sbp {
5255    fn from(msg: MsgIarState) -> Self {
5256        Sbp::MsgIarState(msg)
5257    }
5258}
5259
5260impl From<MsgEphemerisDepA> for Sbp {
5261    fn from(msg: MsgEphemerisDepA) -> Self {
5262        Sbp::MsgEphemerisDepA(msg)
5263    }
5264}
5265
5266impl From<MsgMaskSatelliteDep> for Sbp {
5267    fn from(msg: MsgMaskSatelliteDep) -> Self {
5268        Sbp::MsgMaskSatelliteDep(msg)
5269    }
5270}
5271
5272impl From<MsgTrackingIqDepA> for Sbp {
5273    fn from(msg: MsgTrackingIqDepA) -> Self {
5274        Sbp::MsgTrackingIqDepA(msg)
5275    }
5276}
5277
5278impl From<MsgUartState> for Sbp {
5279    fn from(msg: MsgUartState) -> Self {
5280        Sbp::MsgUartState(msg)
5281    }
5282}
5283
5284impl From<MsgAcqSvProfileDep> for Sbp {
5285    fn from(msg: MsgAcqSvProfileDep) -> Self {
5286        Sbp::MsgAcqSvProfileDep(msg)
5287    }
5288}
5289
5290impl From<MsgAcqResultDepC> for Sbp {
5291    fn from(msg: MsgAcqResultDepC) -> Self {
5292        Sbp::MsgAcqResultDepC(msg)
5293    }
5294}
5295
5296impl From<MsgTrackingStateDetailedDepA> for Sbp {
5297    fn from(msg: MsgTrackingStateDetailedDepA) -> Self {
5298        Sbp::MsgTrackingStateDetailedDepA(msg)
5299    }
5300}
5301
5302impl From<MsgResetFilters> for Sbp {
5303    fn from(msg: MsgResetFilters) -> Self {
5304        Sbp::MsgResetFilters(msg)
5305    }
5306}
5307
5308impl From<MsgInitBaseDep> for Sbp {
5309    fn from(msg: MsgInitBaseDep) -> Self {
5310        Sbp::MsgInitBaseDep(msg)
5311    }
5312}
5313
5314impl From<MsgMaskSatellite> for Sbp {
5315    fn from(msg: MsgMaskSatellite) -> Self {
5316        Sbp::MsgMaskSatellite(msg)
5317    }
5318}
5319
5320impl From<MsgTrackingIqDepB> for Sbp {
5321    fn from(msg: MsgTrackingIqDepB) -> Self {
5322        Sbp::MsgTrackingIqDepB(msg)
5323    }
5324}
5325
5326impl From<MsgTrackingIq> for Sbp {
5327    fn from(msg: MsgTrackingIq) -> Self {
5328        Sbp::MsgTrackingIq(msg)
5329    }
5330}
5331
5332impl From<MsgAcqSvProfile> for Sbp {
5333    fn from(msg: MsgAcqSvProfile) -> Self {
5334        Sbp::MsgAcqSvProfile(msg)
5335    }
5336}
5337
5338impl From<MsgAcqResult> for Sbp {
5339    fn from(msg: MsgAcqResult) -> Self {
5340        Sbp::MsgAcqResult(msg)
5341    }
5342}
5343
5344impl From<MsgTrackingState> for Sbp {
5345    fn from(msg: MsgTrackingState) -> Self {
5346        Sbp::MsgTrackingState(msg)
5347    }
5348}
5349
5350impl From<MsgObsDepB> for Sbp {
5351    fn from(msg: MsgObsDepB) -> Self {
5352        Sbp::MsgObsDepB(msg)
5353    }
5354}
5355
5356impl From<MsgBasePosLlh> for Sbp {
5357    fn from(msg: MsgBasePosLlh) -> Self {
5358        Sbp::MsgBasePosLlh(msg)
5359    }
5360}
5361
5362impl From<MsgObsDepA> for Sbp {
5363    fn from(msg: MsgObsDepA) -> Self {
5364        Sbp::MsgObsDepA(msg)
5365    }
5366}
5367
5368impl From<MsgEphemerisDepB> for Sbp {
5369    fn from(msg: MsgEphemerisDepB) -> Self {
5370        Sbp::MsgEphemerisDepB(msg)
5371    }
5372}
5373
5374impl From<MsgEphemerisDepC> for Sbp {
5375    fn from(msg: MsgEphemerisDepC) -> Self {
5376        Sbp::MsgEphemerisDepC(msg)
5377    }
5378}
5379
5380impl From<MsgBasePosEcef> for Sbp {
5381    fn from(msg: MsgBasePosEcef) -> Self {
5382        Sbp::MsgBasePosEcef(msg)
5383    }
5384}
5385
5386impl From<MsgObsDepC> for Sbp {
5387    fn from(msg: MsgObsDepC) -> Self {
5388        Sbp::MsgObsDepC(msg)
5389    }
5390}
5391
5392impl From<MsgObs> for Sbp {
5393    fn from(msg: MsgObs) -> Self {
5394        Sbp::MsgObs(msg)
5395    }
5396}
5397
5398impl From<MsgSpecanDep> for Sbp {
5399    fn from(msg: MsgSpecanDep) -> Self {
5400        Sbp::MsgSpecanDep(msg)
5401    }
5402}
5403
5404impl From<MsgSpecan> for Sbp {
5405    fn from(msg: MsgSpecan) -> Self {
5406        Sbp::MsgSpecan(msg)
5407    }
5408}
5409
5410impl From<MsgMeasurementState> for Sbp {
5411    fn from(msg: MsgMeasurementState) -> Self {
5412        Sbp::MsgMeasurementState(msg)
5413    }
5414}
5415
5416impl From<MsgSetTime> for Sbp {
5417    fn from(msg: MsgSetTime) -> Self {
5418        Sbp::MsgSetTime(msg)
5419    }
5420}
5421
5422impl From<MsgAlmanac> for Sbp {
5423    fn from(msg: MsgAlmanac) -> Self {
5424        Sbp::MsgAlmanac(msg)
5425    }
5426}
5427
5428impl From<MsgAlmanacGpsDep> for Sbp {
5429    fn from(msg: MsgAlmanacGpsDep) -> Self {
5430        Sbp::MsgAlmanacGpsDep(msg)
5431    }
5432}
5433
5434impl From<MsgAlmanacGloDep> for Sbp {
5435    fn from(msg: MsgAlmanacGloDep) -> Self {
5436        Sbp::MsgAlmanacGloDep(msg)
5437    }
5438}
5439
5440impl From<MsgAlmanacGps> for Sbp {
5441    fn from(msg: MsgAlmanacGps) -> Self {
5442        Sbp::MsgAlmanacGps(msg)
5443    }
5444}
5445
5446impl From<MsgAlmanacGlo> for Sbp {
5447    fn from(msg: MsgAlmanacGlo) -> Self {
5448        Sbp::MsgAlmanacGlo(msg)
5449    }
5450}
5451
5452impl From<MsgGloBiases> for Sbp {
5453    fn from(msg: MsgGloBiases) -> Self {
5454        Sbp::MsgGloBiases(msg)
5455    }
5456}
5457
5458impl From<MsgEphemerisDepD> for Sbp {
5459    fn from(msg: MsgEphemerisDepD) -> Self {
5460        Sbp::MsgEphemerisDepD(msg)
5461    }
5462}
5463
5464impl From<MsgEphemerisGpsDepE> for Sbp {
5465    fn from(msg: MsgEphemerisGpsDepE) -> Self {
5466        Sbp::MsgEphemerisGpsDepE(msg)
5467    }
5468}
5469
5470impl From<MsgEphemerisSbasDepA> for Sbp {
5471    fn from(msg: MsgEphemerisSbasDepA) -> Self {
5472        Sbp::MsgEphemerisSbasDepA(msg)
5473    }
5474}
5475
5476impl From<MsgEphemerisGloDepA> for Sbp {
5477    fn from(msg: MsgEphemerisGloDepA) -> Self {
5478        Sbp::MsgEphemerisGloDepA(msg)
5479    }
5480}
5481
5482impl From<MsgEphemerisSbasDepB> for Sbp {
5483    fn from(msg: MsgEphemerisSbasDepB) -> Self {
5484        Sbp::MsgEphemerisSbasDepB(msg)
5485    }
5486}
5487
5488impl From<MsgEphemerisGloDepB> for Sbp {
5489    fn from(msg: MsgEphemerisGloDepB) -> Self {
5490        Sbp::MsgEphemerisGloDepB(msg)
5491    }
5492}
5493
5494impl From<MsgEphemerisGpsDepF> for Sbp {
5495    fn from(msg: MsgEphemerisGpsDepF) -> Self {
5496        Sbp::MsgEphemerisGpsDepF(msg)
5497    }
5498}
5499
5500impl From<MsgEphemerisGloDepC> for Sbp {
5501    fn from(msg: MsgEphemerisGloDepC) -> Self {
5502        Sbp::MsgEphemerisGloDepC(msg)
5503    }
5504}
5505
5506impl From<MsgEphemerisGloDepD> for Sbp {
5507    fn from(msg: MsgEphemerisGloDepD) -> Self {
5508        Sbp::MsgEphemerisGloDepD(msg)
5509    }
5510}
5511
5512impl From<MsgEphemerisBds> for Sbp {
5513    fn from(msg: MsgEphemerisBds) -> Self {
5514        Sbp::MsgEphemerisBds(msg)
5515    }
5516}
5517
5518impl From<MsgEphemerisGps> for Sbp {
5519    fn from(msg: MsgEphemerisGps) -> Self {
5520        Sbp::MsgEphemerisGps(msg)
5521    }
5522}
5523
5524impl From<MsgEphemerisGlo> for Sbp {
5525    fn from(msg: MsgEphemerisGlo) -> Self {
5526        Sbp::MsgEphemerisGlo(msg)
5527    }
5528}
5529
5530impl From<MsgEphemerisSbas> for Sbp {
5531    fn from(msg: MsgEphemerisSbas) -> Self {
5532        Sbp::MsgEphemerisSbas(msg)
5533    }
5534}
5535
5536impl From<MsgEphemerisGal> for Sbp {
5537    fn from(msg: MsgEphemerisGal) -> Self {
5538        Sbp::MsgEphemerisGal(msg)
5539    }
5540}
5541
5542impl From<MsgEphemerisQzss> for Sbp {
5543    fn from(msg: MsgEphemerisQzss) -> Self {
5544        Sbp::MsgEphemerisQzss(msg)
5545    }
5546}
5547
5548impl From<MsgIono> for Sbp {
5549    fn from(msg: MsgIono) -> Self {
5550        Sbp::MsgIono(msg)
5551    }
5552}
5553
5554impl From<MsgSvConfigurationGpsDep> for Sbp {
5555    fn from(msg: MsgSvConfigurationGpsDep) -> Self {
5556        Sbp::MsgSvConfigurationGpsDep(msg)
5557    }
5558}
5559
5560impl From<MsgGroupDelayDepA> for Sbp {
5561    fn from(msg: MsgGroupDelayDepA) -> Self {
5562        Sbp::MsgGroupDelayDepA(msg)
5563    }
5564}
5565
5566impl From<MsgGroupDelayDepB> for Sbp {
5567    fn from(msg: MsgGroupDelayDepB) -> Self {
5568        Sbp::MsgGroupDelayDepB(msg)
5569    }
5570}
5571
5572impl From<MsgGroupDelay> for Sbp {
5573    fn from(msg: MsgGroupDelay) -> Self {
5574        Sbp::MsgGroupDelay(msg)
5575    }
5576}
5577
5578impl From<MsgEphemerisGalDepA> for Sbp {
5579    fn from(msg: MsgEphemerisGalDepA) -> Self {
5580        Sbp::MsgEphemerisGalDepA(msg)
5581    }
5582}
5583
5584impl From<MsgGnssCapb> for Sbp {
5585    fn from(msg: MsgGnssCapb) -> Self {
5586        Sbp::MsgGnssCapb(msg)
5587    }
5588}
5589
5590impl From<MsgSvAzEl> for Sbp {
5591    fn from(msg: MsgSvAzEl) -> Self {
5592        Sbp::MsgSvAzEl(msg)
5593    }
5594}
5595
5596impl From<MsgSettingsWrite> for Sbp {
5597    fn from(msg: MsgSettingsWrite) -> Self {
5598        Sbp::MsgSettingsWrite(msg)
5599    }
5600}
5601
5602impl From<MsgSettingsSave> for Sbp {
5603    fn from(msg: MsgSettingsSave) -> Self {
5604        Sbp::MsgSettingsSave(msg)
5605    }
5606}
5607
5608impl From<MsgSettingsReadByIndexReq> for Sbp {
5609    fn from(msg: MsgSettingsReadByIndexReq) -> Self {
5610        Sbp::MsgSettingsReadByIndexReq(msg)
5611    }
5612}
5613
5614impl From<MsgFileioReadResp> for Sbp {
5615    fn from(msg: MsgFileioReadResp) -> Self {
5616        Sbp::MsgFileioReadResp(msg)
5617    }
5618}
5619
5620impl From<MsgSettingsReadReq> for Sbp {
5621    fn from(msg: MsgSettingsReadReq) -> Self {
5622        Sbp::MsgSettingsReadReq(msg)
5623    }
5624}
5625
5626impl From<MsgSettingsReadResp> for Sbp {
5627    fn from(msg: MsgSettingsReadResp) -> Self {
5628        Sbp::MsgSettingsReadResp(msg)
5629    }
5630}
5631
5632impl From<MsgSettingsReadByIndexDone> for Sbp {
5633    fn from(msg: MsgSettingsReadByIndexDone) -> Self {
5634        Sbp::MsgSettingsReadByIndexDone(msg)
5635    }
5636}
5637
5638impl From<MsgSettingsReadByIndexResp> for Sbp {
5639    fn from(msg: MsgSettingsReadByIndexResp) -> Self {
5640        Sbp::MsgSettingsReadByIndexResp(msg)
5641    }
5642}
5643
5644impl From<MsgFileioReadReq> for Sbp {
5645    fn from(msg: MsgFileioReadReq) -> Self {
5646        Sbp::MsgFileioReadReq(msg)
5647    }
5648}
5649
5650impl From<MsgFileioReadDirReq> for Sbp {
5651    fn from(msg: MsgFileioReadDirReq) -> Self {
5652        Sbp::MsgFileioReadDirReq(msg)
5653    }
5654}
5655
5656impl From<MsgFileioReadDirResp> for Sbp {
5657    fn from(msg: MsgFileioReadDirResp) -> Self {
5658        Sbp::MsgFileioReadDirResp(msg)
5659    }
5660}
5661
5662impl From<MsgFileioWriteResp> for Sbp {
5663    fn from(msg: MsgFileioWriteResp) -> Self {
5664        Sbp::MsgFileioWriteResp(msg)
5665    }
5666}
5667
5668impl From<MsgFileioRemove> for Sbp {
5669    fn from(msg: MsgFileioRemove) -> Self {
5670        Sbp::MsgFileioRemove(msg)
5671    }
5672}
5673
5674impl From<MsgFileioWriteReq> for Sbp {
5675    fn from(msg: MsgFileioWriteReq) -> Self {
5676        Sbp::MsgFileioWriteReq(msg)
5677    }
5678}
5679
5680impl From<MsgSettingsRegister> for Sbp {
5681    fn from(msg: MsgSettingsRegister) -> Self {
5682        Sbp::MsgSettingsRegister(msg)
5683    }
5684}
5685
5686impl From<MsgSettingsWriteResp> for Sbp {
5687    fn from(msg: MsgSettingsWriteResp) -> Self {
5688        Sbp::MsgSettingsWriteResp(msg)
5689    }
5690}
5691
5692impl From<MsgBootloaderHandshakeDepA> for Sbp {
5693    fn from(msg: MsgBootloaderHandshakeDepA) -> Self {
5694        Sbp::MsgBootloaderHandshakeDepA(msg)
5695    }
5696}
5697
5698impl From<MsgBootloaderJumpToApp> for Sbp {
5699    fn from(msg: MsgBootloaderJumpToApp) -> Self {
5700        Sbp::MsgBootloaderJumpToApp(msg)
5701    }
5702}
5703
5704impl From<MsgResetDep> for Sbp {
5705    fn from(msg: MsgResetDep) -> Self {
5706        Sbp::MsgResetDep(msg)
5707    }
5708}
5709
5710impl From<MsgBootloaderHandshakeReq> for Sbp {
5711    fn from(msg: MsgBootloaderHandshakeReq) -> Self {
5712        Sbp::MsgBootloaderHandshakeReq(msg)
5713    }
5714}
5715
5716impl From<MsgBootloaderHandshakeResp> for Sbp {
5717    fn from(msg: MsgBootloaderHandshakeResp) -> Self {
5718        Sbp::MsgBootloaderHandshakeResp(msg)
5719    }
5720}
5721
5722impl From<MsgDeviceMonitor> for Sbp {
5723    fn from(msg: MsgDeviceMonitor) -> Self {
5724        Sbp::MsgDeviceMonitor(msg)
5725    }
5726}
5727
5728impl From<MsgReset> for Sbp {
5729    fn from(msg: MsgReset) -> Self {
5730        Sbp::MsgReset(msg)
5731    }
5732}
5733
5734impl From<MsgCommandReq> for Sbp {
5735    fn from(msg: MsgCommandReq) -> Self {
5736        Sbp::MsgCommandReq(msg)
5737    }
5738}
5739
5740impl From<MsgCommandResp> for Sbp {
5741    fn from(msg: MsgCommandResp) -> Self {
5742        Sbp::MsgCommandResp(msg)
5743    }
5744}
5745
5746impl From<MsgNetworkStateReq> for Sbp {
5747    fn from(msg: MsgNetworkStateReq) -> Self {
5748        Sbp::MsgNetworkStateReq(msg)
5749    }
5750}
5751
5752impl From<MsgNetworkStateResp> for Sbp {
5753    fn from(msg: MsgNetworkStateResp) -> Self {
5754        Sbp::MsgNetworkStateResp(msg)
5755    }
5756}
5757
5758impl From<MsgCommandOutput> for Sbp {
5759    fn from(msg: MsgCommandOutput) -> Self {
5760        Sbp::MsgCommandOutput(msg)
5761    }
5762}
5763
5764impl From<MsgNetworkBandwidthUsage> for Sbp {
5765    fn from(msg: MsgNetworkBandwidthUsage) -> Self {
5766        Sbp::MsgNetworkBandwidthUsage(msg)
5767    }
5768}
5769
5770impl From<MsgCellModemStatus> for Sbp {
5771    fn from(msg: MsgCellModemStatus) -> Self {
5772        Sbp::MsgCellModemStatus(msg)
5773    }
5774}
5775
5776impl From<MsgFrontEndGain> for Sbp {
5777    fn from(msg: MsgFrontEndGain) -> Self {
5778        Sbp::MsgFrontEndGain(msg)
5779    }
5780}
5781
5782impl From<MsgCwResults> for Sbp {
5783    fn from(msg: MsgCwResults) -> Self {
5784        Sbp::MsgCwResults(msg)
5785    }
5786}
5787
5788impl From<MsgCwStart> for Sbp {
5789    fn from(msg: MsgCwStart) -> Self {
5790        Sbp::MsgCwStart(msg)
5791    }
5792}
5793
5794impl From<MsgNapDeviceDnaResp> for Sbp {
5795    fn from(msg: MsgNapDeviceDnaResp) -> Self {
5796        Sbp::MsgNapDeviceDnaResp(msg)
5797    }
5798}
5799
5800impl From<MsgNapDeviceDnaReq> for Sbp {
5801    fn from(msg: MsgNapDeviceDnaReq) -> Self {
5802        Sbp::MsgNapDeviceDnaReq(msg)
5803    }
5804}
5805
5806impl From<MsgFlashDone> for Sbp {
5807    fn from(msg: MsgFlashDone) -> Self {
5808        Sbp::MsgFlashDone(msg)
5809    }
5810}
5811
5812impl From<MsgFlashReadResp> for Sbp {
5813    fn from(msg: MsgFlashReadResp) -> Self {
5814        Sbp::MsgFlashReadResp(msg)
5815    }
5816}
5817
5818impl From<MsgFlashErase> for Sbp {
5819    fn from(msg: MsgFlashErase) -> Self {
5820        Sbp::MsgFlashErase(msg)
5821    }
5822}
5823
5824impl From<MsgStmFlashLockSector> for Sbp {
5825    fn from(msg: MsgStmFlashLockSector) -> Self {
5826        Sbp::MsgStmFlashLockSector(msg)
5827    }
5828}
5829
5830impl From<MsgStmFlashUnlockSector> for Sbp {
5831    fn from(msg: MsgStmFlashUnlockSector) -> Self {
5832        Sbp::MsgStmFlashUnlockSector(msg)
5833    }
5834}
5835
5836impl From<MsgStmUniqueIdResp> for Sbp {
5837    fn from(msg: MsgStmUniqueIdResp) -> Self {
5838        Sbp::MsgStmUniqueIdResp(msg)
5839    }
5840}
5841
5842impl From<MsgFlashProgram> for Sbp {
5843    fn from(msg: MsgFlashProgram) -> Self {
5844        Sbp::MsgFlashProgram(msg)
5845    }
5846}
5847
5848impl From<MsgFlashReadReq> for Sbp {
5849    fn from(msg: MsgFlashReadReq) -> Self {
5850        Sbp::MsgFlashReadReq(msg)
5851    }
5852}
5853
5854impl From<MsgStmUniqueIdReq> for Sbp {
5855    fn from(msg: MsgStmUniqueIdReq) -> Self {
5856        Sbp::MsgStmUniqueIdReq(msg)
5857    }
5858}
5859
5860impl From<MsgM25FlashWriteStatus> for Sbp {
5861    fn from(msg: MsgM25FlashWriteStatus) -> Self {
5862        Sbp::MsgM25FlashWriteStatus(msg)
5863    }
5864}
5865
5866impl From<MsgGpsTimeDepA> for Sbp {
5867    fn from(msg: MsgGpsTimeDepA) -> Self {
5868        Sbp::MsgGpsTimeDepA(msg)
5869    }
5870}
5871
5872impl From<MsgExtEvent> for Sbp {
5873    fn from(msg: MsgExtEvent) -> Self {
5874        Sbp::MsgExtEvent(msg)
5875    }
5876}
5877
5878impl From<MsgGpsTime> for Sbp {
5879    fn from(msg: MsgGpsTime) -> Self {
5880        Sbp::MsgGpsTime(msg)
5881    }
5882}
5883
5884impl From<MsgUtcTime> for Sbp {
5885    fn from(msg: MsgUtcTime) -> Self {
5886        Sbp::MsgUtcTime(msg)
5887    }
5888}
5889
5890impl From<MsgGpsTimeGnss> for Sbp {
5891    fn from(msg: MsgGpsTimeGnss) -> Self {
5892        Sbp::MsgGpsTimeGnss(msg)
5893    }
5894}
5895
5896impl From<MsgUtcTimeGnss> for Sbp {
5897    fn from(msg: MsgUtcTimeGnss) -> Self {
5898        Sbp::MsgUtcTimeGnss(msg)
5899    }
5900}
5901
5902impl From<MsgTelSv> for Sbp {
5903    fn from(msg: MsgTelSv) -> Self {
5904        Sbp::MsgTelSv(msg)
5905    }
5906}
5907
5908impl From<MsgSettingsRegisterResp> for Sbp {
5909    fn from(msg: MsgSettingsRegisterResp) -> Self {
5910        Sbp::MsgSettingsRegisterResp(msg)
5911    }
5912}
5913
5914impl From<MsgPosEcefDepA> for Sbp {
5915    fn from(msg: MsgPosEcefDepA) -> Self {
5916        Sbp::MsgPosEcefDepA(msg)
5917    }
5918}
5919
5920impl From<MsgPosLlhDepA> for Sbp {
5921    fn from(msg: MsgPosLlhDepA) -> Self {
5922        Sbp::MsgPosLlhDepA(msg)
5923    }
5924}
5925
5926impl From<MsgBaselineEcefDepA> for Sbp {
5927    fn from(msg: MsgBaselineEcefDepA) -> Self {
5928        Sbp::MsgBaselineEcefDepA(msg)
5929    }
5930}
5931
5932impl From<MsgBaselineNedDepA> for Sbp {
5933    fn from(msg: MsgBaselineNedDepA) -> Self {
5934        Sbp::MsgBaselineNedDepA(msg)
5935    }
5936}
5937
5938impl From<MsgVelEcefDepA> for Sbp {
5939    fn from(msg: MsgVelEcefDepA) -> Self {
5940        Sbp::MsgVelEcefDepA(msg)
5941    }
5942}
5943
5944impl From<MsgVelNedDepA> for Sbp {
5945    fn from(msg: MsgVelNedDepA) -> Self {
5946        Sbp::MsgVelNedDepA(msg)
5947    }
5948}
5949
5950impl From<MsgDopsDepA> for Sbp {
5951    fn from(msg: MsgDopsDepA) -> Self {
5952        Sbp::MsgDopsDepA(msg)
5953    }
5954}
5955
5956impl From<MsgBaselineHeadingDepA> for Sbp {
5957    fn from(msg: MsgBaselineHeadingDepA) -> Self {
5958        Sbp::MsgBaselineHeadingDepA(msg)
5959    }
5960}
5961
5962impl From<MsgDops> for Sbp {
5963    fn from(msg: MsgDops) -> Self {
5964        Sbp::MsgDops(msg)
5965    }
5966}
5967
5968impl From<MsgPosEcef> for Sbp {
5969    fn from(msg: MsgPosEcef) -> Self {
5970        Sbp::MsgPosEcef(msg)
5971    }
5972}
5973
5974impl From<MsgPosLlh> for Sbp {
5975    fn from(msg: MsgPosLlh) -> Self {
5976        Sbp::MsgPosLlh(msg)
5977    }
5978}
5979
5980impl From<MsgBaselineEcef> for Sbp {
5981    fn from(msg: MsgBaselineEcef) -> Self {
5982        Sbp::MsgBaselineEcef(msg)
5983    }
5984}
5985
5986impl From<MsgBaselineNed> for Sbp {
5987    fn from(msg: MsgBaselineNed) -> Self {
5988        Sbp::MsgBaselineNed(msg)
5989    }
5990}
5991
5992impl From<MsgVelEcef> for Sbp {
5993    fn from(msg: MsgVelEcef) -> Self {
5994        Sbp::MsgVelEcef(msg)
5995    }
5996}
5997
5998impl From<MsgVelNed> for Sbp {
5999    fn from(msg: MsgVelNed) -> Self {
6000        Sbp::MsgVelNed(msg)
6001    }
6002}
6003
6004impl From<MsgBaselineHeading> for Sbp {
6005    fn from(msg: MsgBaselineHeading) -> Self {
6006        Sbp::MsgBaselineHeading(msg)
6007    }
6008}
6009
6010impl From<MsgAgeCorrections> for Sbp {
6011    fn from(msg: MsgAgeCorrections) -> Self {
6012        Sbp::MsgAgeCorrections(msg)
6013    }
6014}
6015
6016impl From<MsgPosLlhCov> for Sbp {
6017    fn from(msg: MsgPosLlhCov) -> Self {
6018        Sbp::MsgPosLlhCov(msg)
6019    }
6020}
6021
6022impl From<MsgVelNedCov> for Sbp {
6023    fn from(msg: MsgVelNedCov) -> Self {
6024        Sbp::MsgVelNedCov(msg)
6025    }
6026}
6027
6028impl From<MsgVelBody> for Sbp {
6029    fn from(msg: MsgVelBody) -> Self {
6030        Sbp::MsgVelBody(msg)
6031    }
6032}
6033
6034impl From<MsgPosEcefCov> for Sbp {
6035    fn from(msg: MsgPosEcefCov) -> Self {
6036        Sbp::MsgPosEcefCov(msg)
6037    }
6038}
6039
6040impl From<MsgVelEcefCov> for Sbp {
6041    fn from(msg: MsgVelEcefCov) -> Self {
6042        Sbp::MsgVelEcefCov(msg)
6043    }
6044}
6045
6046impl From<MsgProtectionLevelDepA> for Sbp {
6047    fn from(msg: MsgProtectionLevelDepA) -> Self {
6048        Sbp::MsgProtectionLevelDepA(msg)
6049    }
6050}
6051
6052impl From<MsgProtectionLevel> for Sbp {
6053    fn from(msg: MsgProtectionLevel) -> Self {
6054        Sbp::MsgProtectionLevel(msg)
6055    }
6056}
6057
6058impl From<MsgPosLlhAcc> for Sbp {
6059    fn from(msg: MsgPosLlhAcc) -> Self {
6060        Sbp::MsgPosLlhAcc(msg)
6061    }
6062}
6063
6064impl From<MsgVelCog> for Sbp {
6065    fn from(msg: MsgVelCog) -> Self {
6066        Sbp::MsgVelCog(msg)
6067    }
6068}
6069
6070impl From<MsgOrientQuat> for Sbp {
6071    fn from(msg: MsgOrientQuat) -> Self {
6072        Sbp::MsgOrientQuat(msg)
6073    }
6074}
6075
6076impl From<MsgOrientEuler> for Sbp {
6077    fn from(msg: MsgOrientEuler) -> Self {
6078        Sbp::MsgOrientEuler(msg)
6079    }
6080}
6081
6082impl From<MsgAngularRate> for Sbp {
6083    fn from(msg: MsgAngularRate) -> Self {
6084        Sbp::MsgAngularRate(msg)
6085    }
6086}
6087
6088impl From<MsgPosEcefGnss> for Sbp {
6089    fn from(msg: MsgPosEcefGnss) -> Self {
6090        Sbp::MsgPosEcefGnss(msg)
6091    }
6092}
6093
6094impl From<MsgPosLlhGnss> for Sbp {
6095    fn from(msg: MsgPosLlhGnss) -> Self {
6096        Sbp::MsgPosLlhGnss(msg)
6097    }
6098}
6099
6100impl From<MsgVelEcefGnss> for Sbp {
6101    fn from(msg: MsgVelEcefGnss) -> Self {
6102        Sbp::MsgVelEcefGnss(msg)
6103    }
6104}
6105
6106impl From<MsgVelNedGnss> for Sbp {
6107    fn from(msg: MsgVelNedGnss) -> Self {
6108        Sbp::MsgVelNedGnss(msg)
6109    }
6110}
6111
6112impl From<MsgPosLlhCovGnss> for Sbp {
6113    fn from(msg: MsgPosLlhCovGnss) -> Self {
6114        Sbp::MsgPosLlhCovGnss(msg)
6115    }
6116}
6117
6118impl From<MsgVelNedCovGnss> for Sbp {
6119    fn from(msg: MsgVelNedCovGnss) -> Self {
6120        Sbp::MsgVelNedCovGnss(msg)
6121    }
6122}
6123
6124impl From<MsgPosEcefCovGnss> for Sbp {
6125    fn from(msg: MsgPosEcefCovGnss) -> Self {
6126        Sbp::MsgPosEcefCovGnss(msg)
6127    }
6128}
6129
6130impl From<MsgVelEcefCovGnss> for Sbp {
6131    fn from(msg: MsgVelEcefCovGnss) -> Self {
6132        Sbp::MsgVelEcefCovGnss(msg)
6133    }
6134}
6135
6136impl From<MsgUtcLeapSecond> for Sbp {
6137    fn from(msg: MsgUtcLeapSecond) -> Self {
6138        Sbp::MsgUtcLeapSecond(msg)
6139    }
6140}
6141
6142impl From<MsgReferenceFrameParam> for Sbp {
6143    fn from(msg: MsgReferenceFrameParam) -> Self {
6144        Sbp::MsgReferenceFrameParam(msg)
6145    }
6146}
6147
6148impl From<MsgPoseRelative> for Sbp {
6149    fn from(msg: MsgPoseRelative) -> Self {
6150        Sbp::MsgPoseRelative(msg)
6151    }
6152}
6153
6154impl From<MsgNdbEvent> for Sbp {
6155    fn from(msg: MsgNdbEvent) -> Self {
6156        Sbp::MsgNdbEvent(msg)
6157    }
6158}
6159
6160impl From<MsgLog> for Sbp {
6161    fn from(msg: MsgLog) -> Self {
6162        Sbp::MsgLog(msg)
6163    }
6164}
6165
6166impl From<MsgFwd> for Sbp {
6167    fn from(msg: MsgFwd) -> Self {
6168        Sbp::MsgFwd(msg)
6169    }
6170}
6171
6172impl From<MsgSsrOrbitClockDepA> for Sbp {
6173    fn from(msg: MsgSsrOrbitClockDepA) -> Self {
6174        Sbp::MsgSsrOrbitClockDepA(msg)
6175    }
6176}
6177
6178impl From<MsgSsrOrbitClock> for Sbp {
6179    fn from(msg: MsgSsrOrbitClock) -> Self {
6180        Sbp::MsgSsrOrbitClock(msg)
6181    }
6182}
6183
6184impl From<MsgSsrOrbitClockBounds> for Sbp {
6185    fn from(msg: MsgSsrOrbitClockBounds) -> Self {
6186        Sbp::MsgSsrOrbitClockBounds(msg)
6187    }
6188}
6189
6190impl From<MsgSsrOrbitClockBoundsDegradation> for Sbp {
6191    fn from(msg: MsgSsrOrbitClockBoundsDegradation) -> Self {
6192        Sbp::MsgSsrOrbitClockBoundsDegradation(msg)
6193    }
6194}
6195
6196impl From<MsgSsrCodeBiases> for Sbp {
6197    fn from(msg: MsgSsrCodeBiases) -> Self {
6198        Sbp::MsgSsrCodeBiases(msg)
6199    }
6200}
6201
6202impl From<MsgSsrPhaseBiases> for Sbp {
6203    fn from(msg: MsgSsrPhaseBiases) -> Self {
6204        Sbp::MsgSsrPhaseBiases(msg)
6205    }
6206}
6207
6208impl From<MsgSsrStecCorrectionDepA> for Sbp {
6209    fn from(msg: MsgSsrStecCorrectionDepA) -> Self {
6210        Sbp::MsgSsrStecCorrectionDepA(msg)
6211    }
6212}
6213
6214impl From<MsgSsrCodePhaseBiasesBounds> for Sbp {
6215    fn from(msg: MsgSsrCodePhaseBiasesBounds) -> Self {
6216        Sbp::MsgSsrCodePhaseBiasesBounds(msg)
6217    }
6218}
6219
6220impl From<MsgSsrGriddedCorrectionNoStdDepA> for Sbp {
6221    fn from(msg: MsgSsrGriddedCorrectionNoStdDepA) -> Self {
6222        Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg)
6223    }
6224}
6225
6226impl From<MsgSsrGridDefinitionDepA> for Sbp {
6227    fn from(msg: MsgSsrGridDefinitionDepA) -> Self {
6228        Sbp::MsgSsrGridDefinitionDepA(msg)
6229    }
6230}
6231
6232impl From<MsgSsrTileDefinitionDepA> for Sbp {
6233    fn from(msg: MsgSsrTileDefinitionDepA) -> Self {
6234        Sbp::MsgSsrTileDefinitionDepA(msg)
6235    }
6236}
6237
6238impl From<MsgSsrTileDefinitionDepB> for Sbp {
6239    fn from(msg: MsgSsrTileDefinitionDepB) -> Self {
6240        Sbp::MsgSsrTileDefinitionDepB(msg)
6241    }
6242}
6243
6244impl From<MsgSsrTileDefinition> for Sbp {
6245    fn from(msg: MsgSsrTileDefinition) -> Self {
6246        Sbp::MsgSsrTileDefinition(msg)
6247    }
6248}
6249
6250impl From<MsgSsrGriddedCorrectionDepA> for Sbp {
6251    fn from(msg: MsgSsrGriddedCorrectionDepA) -> Self {
6252        Sbp::MsgSsrGriddedCorrectionDepA(msg)
6253    }
6254}
6255
6256impl From<MsgSsrStecCorrectionDep> for Sbp {
6257    fn from(msg: MsgSsrStecCorrectionDep) -> Self {
6258        Sbp::MsgSsrStecCorrectionDep(msg)
6259    }
6260}
6261
6262impl From<MsgSsrGriddedCorrection> for Sbp {
6263    fn from(msg: MsgSsrGriddedCorrection) -> Self {
6264        Sbp::MsgSsrGriddedCorrection(msg)
6265    }
6266}
6267
6268impl From<MsgSsrStecCorrection> for Sbp {
6269    fn from(msg: MsgSsrStecCorrection) -> Self {
6270        Sbp::MsgSsrStecCorrection(msg)
6271    }
6272}
6273
6274impl From<MsgSsrGriddedCorrectionBounds> for Sbp {
6275    fn from(msg: MsgSsrGriddedCorrectionBounds) -> Self {
6276        Sbp::MsgSsrGriddedCorrectionBounds(msg)
6277    }
6278}
6279
6280impl From<MsgSsrSatelliteApcDep> for Sbp {
6281    fn from(msg: MsgSsrSatelliteApcDep) -> Self {
6282        Sbp::MsgSsrSatelliteApcDep(msg)
6283    }
6284}
6285
6286impl From<MsgSsrSatelliteApc> for Sbp {
6287    fn from(msg: MsgSsrSatelliteApc) -> Self {
6288        Sbp::MsgSsrSatelliteApc(msg)
6289    }
6290}
6291
6292impl From<MsgOsr> for Sbp {
6293    fn from(msg: MsgOsr) -> Self {
6294        Sbp::MsgOsr(msg)
6295    }
6296}
6297
6298impl From<MsgUserData> for Sbp {
6299    fn from(msg: MsgUserData) -> Self {
6300        Sbp::MsgUserData(msg)
6301    }
6302}
6303
6304impl From<MsgImuRaw> for Sbp {
6305    fn from(msg: MsgImuRaw) -> Self {
6306        Sbp::MsgImuRaw(msg)
6307    }
6308}
6309
6310impl From<MsgImuAux> for Sbp {
6311    fn from(msg: MsgImuAux) -> Self {
6312        Sbp::MsgImuAux(msg)
6313    }
6314}
6315
6316impl From<MsgMagRaw> for Sbp {
6317    fn from(msg: MsgMagRaw) -> Self {
6318        Sbp::MsgMagRaw(msg)
6319    }
6320}
6321
6322impl From<MsgOdometry> for Sbp {
6323    fn from(msg: MsgOdometry) -> Self {
6324        Sbp::MsgOdometry(msg)
6325    }
6326}
6327
6328impl From<MsgWheeltick> for Sbp {
6329    fn from(msg: MsgWheeltick) -> Self {
6330        Sbp::MsgWheeltick(msg)
6331    }
6332}
6333
6334impl From<MsgImuComp> for Sbp {
6335    fn from(msg: MsgImuComp) -> Self {
6336        Sbp::MsgImuComp(msg)
6337    }
6338}
6339
6340impl From<MsgSsrFlagHighLevelDepA> for Sbp {
6341    fn from(msg: MsgSsrFlagHighLevelDepA) -> Self {
6342        Sbp::MsgSsrFlagHighLevelDepA(msg)
6343    }
6344}
6345
6346impl From<MsgSsrFlagHighLevel> for Sbp {
6347    fn from(msg: MsgSsrFlagHighLevel) -> Self {
6348        Sbp::MsgSsrFlagHighLevel(msg)
6349    }
6350}
6351
6352impl From<MsgSsrFlagSatellites> for Sbp {
6353    fn from(msg: MsgSsrFlagSatellites) -> Self {
6354        Sbp::MsgSsrFlagSatellites(msg)
6355    }
6356}
6357
6358impl From<MsgSsrFlagTropoGridPoints> for Sbp {
6359    fn from(msg: MsgSsrFlagTropoGridPoints) -> Self {
6360        Sbp::MsgSsrFlagTropoGridPoints(msg)
6361    }
6362}
6363
6364impl From<MsgSsrFlagIonoGridPoints> for Sbp {
6365    fn from(msg: MsgSsrFlagIonoGridPoints) -> Self {
6366        Sbp::MsgSsrFlagIonoGridPoints(msg)
6367    }
6368}
6369
6370impl From<MsgSsrFlagIonoTileSatLos> for Sbp {
6371    fn from(msg: MsgSsrFlagIonoTileSatLos) -> Self {
6372        Sbp::MsgSsrFlagIonoTileSatLos(msg)
6373    }
6374}
6375
6376impl From<MsgSsrFlagIonoGridPointSatLos> for Sbp {
6377    fn from(msg: MsgSsrFlagIonoGridPointSatLos) -> Self {
6378        Sbp::MsgSsrFlagIonoGridPointSatLos(msg)
6379    }
6380}
6381
6382impl From<MsgAcknowledge> for Sbp {
6383    fn from(msg: MsgAcknowledge) -> Self {
6384        Sbp::MsgAcknowledge(msg)
6385    }
6386}
6387
6388impl From<MsgEd25519SignatureDepA> for Sbp {
6389    fn from(msg: MsgEd25519SignatureDepA) -> Self {
6390        Sbp::MsgEd25519SignatureDepA(msg)
6391    }
6392}
6393
6394impl From<MsgEd25519CertificateDep> for Sbp {
6395    fn from(msg: MsgEd25519CertificateDep) -> Self {
6396        Sbp::MsgEd25519CertificateDep(msg)
6397    }
6398}
6399
6400impl From<MsgEd25519SignatureDepB> for Sbp {
6401    fn from(msg: MsgEd25519SignatureDepB) -> Self {
6402        Sbp::MsgEd25519SignatureDepB(msg)
6403    }
6404}
6405
6406impl From<MsgEcdsaCertificate> for Sbp {
6407    fn from(msg: MsgEcdsaCertificate) -> Self {
6408        Sbp::MsgEcdsaCertificate(msg)
6409    }
6410}
6411
6412impl From<MsgCertificateChainDep> for Sbp {
6413    fn from(msg: MsgCertificateChainDep) -> Self {
6414        Sbp::MsgCertificateChainDep(msg)
6415    }
6416}
6417
6418impl From<MsgEcdsaSignatureDepA> for Sbp {
6419    fn from(msg: MsgEcdsaSignatureDepA) -> Self {
6420        Sbp::MsgEcdsaSignatureDepA(msg)
6421    }
6422}
6423
6424impl From<MsgEcdsaSignatureDepB> for Sbp {
6425    fn from(msg: MsgEcdsaSignatureDepB) -> Self {
6426        Sbp::MsgEcdsaSignatureDepB(msg)
6427    }
6428}
6429
6430impl From<MsgEcdsaSignature> for Sbp {
6431    fn from(msg: MsgEcdsaSignature) -> Self {
6432        Sbp::MsgEcdsaSignature(msg)
6433    }
6434}
6435
6436impl From<MsgCertificateChain> for Sbp {
6437    fn from(msg: MsgCertificateChain) -> Self {
6438        Sbp::MsgCertificateChain(msg)
6439    }
6440}
6441
6442impl From<MsgAesCmacSignature> for Sbp {
6443    fn from(msg: MsgAesCmacSignature) -> Self {
6444        Sbp::MsgAesCmacSignature(msg)
6445    }
6446}
6447
6448impl From<MsgFileioConfigReq> for Sbp {
6449    fn from(msg: MsgFileioConfigReq) -> Self {
6450        Sbp::MsgFileioConfigReq(msg)
6451    }
6452}
6453
6454impl From<MsgFileioConfigResp> for Sbp {
6455    fn from(msg: MsgFileioConfigResp) -> Self {
6456        Sbp::MsgFileioConfigResp(msg)
6457    }
6458}
6459
6460impl From<MsgSbasRaw> for Sbp {
6461    fn from(msg: MsgSbasRaw) -> Self {
6462        Sbp::MsgSbasRaw(msg)
6463    }
6464}
6465
6466impl From<MsgLinuxCpuStateDepA> for Sbp {
6467    fn from(msg: MsgLinuxCpuStateDepA) -> Self {
6468        Sbp::MsgLinuxCpuStateDepA(msg)
6469    }
6470}
6471
6472impl From<MsgLinuxMemStateDepA> for Sbp {
6473    fn from(msg: MsgLinuxMemStateDepA) -> Self {
6474        Sbp::MsgLinuxMemStateDepA(msg)
6475    }
6476}
6477
6478impl From<MsgLinuxSysStateDepA> for Sbp {
6479    fn from(msg: MsgLinuxSysStateDepA) -> Self {
6480        Sbp::MsgLinuxSysStateDepA(msg)
6481    }
6482}
6483
6484impl From<MsgLinuxProcessSocketCounts> for Sbp {
6485    fn from(msg: MsgLinuxProcessSocketCounts) -> Self {
6486        Sbp::MsgLinuxProcessSocketCounts(msg)
6487    }
6488}
6489
6490impl From<MsgLinuxProcessSocketQueues> for Sbp {
6491    fn from(msg: MsgLinuxProcessSocketQueues) -> Self {
6492        Sbp::MsgLinuxProcessSocketQueues(msg)
6493    }
6494}
6495
6496impl From<MsgLinuxSocketUsage> for Sbp {
6497    fn from(msg: MsgLinuxSocketUsage) -> Self {
6498        Sbp::MsgLinuxSocketUsage(msg)
6499    }
6500}
6501
6502impl From<MsgLinuxProcessFdCount> for Sbp {
6503    fn from(msg: MsgLinuxProcessFdCount) -> Self {
6504        Sbp::MsgLinuxProcessFdCount(msg)
6505    }
6506}
6507
6508impl From<MsgLinuxProcessFdSummary> for Sbp {
6509    fn from(msg: MsgLinuxProcessFdSummary) -> Self {
6510        Sbp::MsgLinuxProcessFdSummary(msg)
6511    }
6512}
6513
6514impl From<MsgLinuxCpuState> for Sbp {
6515    fn from(msg: MsgLinuxCpuState) -> Self {
6516        Sbp::MsgLinuxCpuState(msg)
6517    }
6518}
6519
6520impl From<MsgLinuxMemState> for Sbp {
6521    fn from(msg: MsgLinuxMemState) -> Self {
6522        Sbp::MsgLinuxMemState(msg)
6523    }
6524}
6525
6526impl From<MsgLinuxSysState> for Sbp {
6527    fn from(msg: MsgLinuxSysState) -> Self {
6528        Sbp::MsgLinuxSysState(msg)
6529    }
6530}
6531
6532impl From<MsgMeasurementPoint> for Sbp {
6533    fn from(msg: MsgMeasurementPoint) -> Self {
6534        Sbp::MsgMeasurementPoint(msg)
6535    }
6536}
6537
6538impl From<MsgProfilingSystemInfo> for Sbp {
6539    fn from(msg: MsgProfilingSystemInfo) -> Self {
6540        Sbp::MsgProfilingSystemInfo(msg)
6541    }
6542}
6543
6544impl From<MsgProfilingThreadInfo> for Sbp {
6545    fn from(msg: MsgProfilingThreadInfo) -> Self {
6546        Sbp::MsgProfilingThreadInfo(msg)
6547    }
6548}
6549
6550impl From<MsgProfilingResourceCounter> for Sbp {
6551    fn from(msg: MsgProfilingResourceCounter) -> Self {
6552        Sbp::MsgProfilingResourceCounter(msg)
6553    }
6554}
6555
6556impl From<MsgStartup> for Sbp {
6557    fn from(msg: MsgStartup) -> Self {
6558        Sbp::MsgStartup(msg)
6559    }
6560}
6561
6562impl From<MsgDgnssStatus> for Sbp {
6563    fn from(msg: MsgDgnssStatus) -> Self {
6564        Sbp::MsgDgnssStatus(msg)
6565    }
6566}
6567
6568impl From<MsgInsStatus> for Sbp {
6569    fn from(msg: MsgInsStatus) -> Self {
6570        Sbp::MsgInsStatus(msg)
6571    }
6572}
6573
6574impl From<MsgCsacTelemetry> for Sbp {
6575    fn from(msg: MsgCsacTelemetry) -> Self {
6576        Sbp::MsgCsacTelemetry(msg)
6577    }
6578}
6579
6580impl From<MsgCsacTelemetryLabels> for Sbp {
6581    fn from(msg: MsgCsacTelemetryLabels) -> Self {
6582        Sbp::MsgCsacTelemetryLabels(msg)
6583    }
6584}
6585
6586impl From<MsgInsUpdates> for Sbp {
6587    fn from(msg: MsgInsUpdates) -> Self {
6588        Sbp::MsgInsUpdates(msg)
6589    }
6590}
6591
6592impl From<MsgGnssTimeOffset> for Sbp {
6593    fn from(msg: MsgGnssTimeOffset) -> Self {
6594        Sbp::MsgGnssTimeOffset(msg)
6595    }
6596}
6597
6598impl From<MsgPpsTime> for Sbp {
6599    fn from(msg: MsgPpsTime) -> Self {
6600        Sbp::MsgPpsTime(msg)
6601    }
6602}
6603
6604impl From<MsgSensorAidEvent> for Sbp {
6605    fn from(msg: MsgSensorAidEvent) -> Self {
6606        Sbp::MsgSensorAidEvent(msg)
6607    }
6608}
6609
6610impl From<MsgGroupMeta> for Sbp {
6611    fn from(msg: MsgGroupMeta) -> Self {
6612        Sbp::MsgGroupMeta(msg)
6613    }
6614}
6615
6616impl From<MsgSolnMeta> for Sbp {
6617    fn from(msg: MsgSolnMeta) -> Self {
6618        Sbp::MsgSolnMeta(msg)
6619    }
6620}
6621
6622impl From<MsgSolnMetaDepA> for Sbp {
6623    fn from(msg: MsgSolnMetaDepA) -> Self {
6624        Sbp::MsgSolnMetaDepA(msg)
6625    }
6626}
6627
6628impl From<MsgStatusJournal> for Sbp {
6629    fn from(msg: MsgStatusJournal) -> Self {
6630        Sbp::MsgStatusJournal(msg)
6631    }
6632}
6633
6634impl From<MsgStatusReport> for Sbp {
6635    fn from(msg: MsgStatusReport) -> Self {
6636        Sbp::MsgStatusReport(msg)
6637    }
6638}
6639
6640impl From<MsgHeartbeat> for Sbp {
6641    fn from(msg: MsgHeartbeat) -> Self {
6642        Sbp::MsgHeartbeat(msg)
6643    }
6644}
6645
6646impl From<Unknown> for Sbp {
6647    fn from(msg: Unknown) -> Self {
6648        Sbp::Unknown(msg)
6649    }
6650}
6651impl From<Invalid> for Sbp {
6652    fn from(msg: Invalid) -> Self {
6653        Sbp::Invalid(msg)
6654    }
6655}