use core::{convert::Infallible, marker::PhantomData};
use crate::{Dialect, MavlinkVersion, Message, error::ParserError};
#[doc(hidden)]
pub struct StaticDialect<M>(PhantomData<fn() -> M>);
impl<M> StaticDialect<M> {
pub(crate) const fn new() -> Self {
Self(PhantomData)
}
}
impl<M: Message> Dialect for StaticDialect<M> {
type Message = M;
type EncodeError = Infallible;
fn message_id(&self, message: &Self::Message) -> u32 {
message.message_id()
}
fn extra_crc(&self, message_id: u32) -> Option<u8> {
Some(M::extra_crc(message_id))
}
fn decode(
&self,
version: MavlinkVersion,
message_id: u32,
payload: &[u8],
) -> Result<Self::Message, ParserError> {
M::parse(version, message_id, payload)
}
fn encode(
&self,
version: MavlinkVersion,
message: &Self::Message,
payload: &mut [u8],
) -> Result<usize, Self::EncodeError> {
Ok(message.ser(version, payload))
}
}