#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::proto::mavlink_messages_v1 as proto;
use crate::protocol::{
enums::EnumEntryMavCmdFlags, enums::EnumEntryMavCmdParam, errors::ProtoImportError, Deprecated,
};
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct EnumEntry {
value: u32,
name: String,
description: String,
cmd_flags: Option<EnumEntryMavCmdFlags>,
params: Vec<EnumEntryMavCmdParam>,
wip: bool,
deprecated: Option<Deprecated>,
defined_in: Option<String>,
}
impl EnumEntry {
#[allow(clippy::too_many_arguments)]
pub fn new(
value: u32,
name: String,
description: String,
cmd_flags: Option<EnumEntryMavCmdFlags>,
params: Vec<EnumEntryMavCmdParam>,
wip: bool,
deprecated: Option<Deprecated>,
defined_in: Option<String>,
) -> Self {
Self {
value,
name,
description,
cmd_flags,
params,
wip,
deprecated,
defined_in,
}
}
pub fn to_proto(&self) -> proto::EnumEntry {
proto::EnumEntry {
value: self.value,
name: self.name.clone(),
description: self.description.clone(),
cmd_flags: self.cmd_flags.as_ref().map(|c| c.to_proto()),
params: self.params.iter().map(|p| p.to_proto()).collect(),
wip: self.wip,
deprecated: self.deprecated.as_ref().map(|d| d.to_proto()),
defined_in: self.defined_in.clone(),
}
}
pub fn from_proto(proto: &proto::EnumEntry) -> Result<EnumEntry, ProtoImportError> {
let mut params = Vec::new();
for param in &proto.params {
params.push(EnumEntryMavCmdParam::from_proto(param.clone())?)
}
Ok(EnumEntry {
value: proto.value,
name: proto.name.clone(),
description: proto.description.clone(),
cmd_flags: proto
.cmd_flags
.as_ref()
.map(|flags| EnumEntryMavCmdFlags::from_proto(flags.clone())),
params,
wip: proto.wip,
deprecated: match &proto.deprecated {
Some(deprecated) => Some(Deprecated::from_proto(deprecated)?),
None => None,
},
defined_in: proto.defined_in.clone(),
})
}
pub fn value(&self) -> u32 {
self.value
}
pub fn name(&self) -> &String {
&self.name
}
pub fn description(&self) -> &String {
&self.description
}
pub fn deprecated(&self) -> &Option<Deprecated> {
&self.deprecated
}
}