use std::marker::PhantomData;
use crate::{
value::{DecodeError, FixedSize, Value},
Group,
};
#[derive(Debug)]
pub struct Point<G: Group, T: Value> {
pub offset: u16,
pub length: u16,
pub writable: bool,
model: PhantomData<G>,
point_type: PhantomData<T>,
}
impl<G: Group, T: Value> Point<G, T> {
pub const fn new(offset: u16, length: u16, writable: bool) -> Self {
Self {
offset,
length,
writable,
model: PhantomData,
point_type: PhantomData,
}
}
pub fn from_data(&self, data: &[u16]) -> Result<T, DecodeError> {
let slice = data
.get(self.offset as usize..(self.offset as usize + self.length as usize))
.ok_or(DecodeError::OutOfBounds)?;
let value = T::decode(slice)?;
Ok(value)
}
}
impl<G: Group, T: FixedSize> Point<G, T> {
pub fn is_invalid(&self, value: &T) -> bool {
value.is_invalid()
}
}