use std::marker::PhantomData;
use crate::{DecodeError, Models};
pub trait Model: Sized {
const ID: u16;
fn from_data(data: &[u16]) -> Result<Self, DecodeError>;
fn addr(models: &Models) -> ModelAddr<Self>;
}
#[derive(Debug)]
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
pub struct ModelAddr<M: Model> {
pub addr: u16,
pub len: u16,
model: PhantomData<M>,
}
impl<M: Model> ModelAddr<M> {
pub fn set_addr(&mut self, addr: u16, len: u16) {
self.addr = addr;
self.len = len;
}
}
impl<M: Model> Default for ModelAddr<M> {
fn default() -> Self {
Self {
addr: Default::default(),
len: Default::default(),
model: Default::default(),
}
}
}