use std::collections::HashMap;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::proto::mavlink_messages_v1 as proto;
use super::errors::ProtoImportError;
use super::Dialect;
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Protocol {
dialects: HashMap<String, Dialect>,
}
impl Protocol {
pub fn new(dialects: HashMap<String, Dialect>) -> Self {
Self { dialects }
}
pub fn to_proto(&self) -> proto::Protocol {
proto::Protocol {
dialects: self
.dialects
.iter()
.map(|(name, dialect)| (name.clone(), dialect.to_proto()))
.collect(),
}
}
pub fn from_proto(proto: &proto::Protocol) -> Result<Self, ProtoImportError> {
let mut dialects = HashMap::new();
for (name, dialect) in &proto.dialects {
dialects.insert(name.clone(), Dialect::from_proto(dialect)?);
}
Ok(Self { dialects })
}
pub fn dialects(&self) -> &HashMap<String, Dialect> {
&self.dialects
}
}