pub trait Property<B: crate::buffer::Buffer> {
type Type;
}
pub trait ReadProperty<'a, B: crate::buffer::Buffer>: Property<B> {
fn read(buffer: &'a B) -> Self::Type;
fn validate(buffer: &B) -> Result<(), crate::error::InvalidData>;
}
pub trait WriteProperty<B: crate::buffer::Buffer + crate::buffer::BufferMut>: Property<B> {
fn write(buffer: &mut B, v: Self::Type);
#[allow(dead_code)]
fn validate(v: &Self::Type) -> Result<(), crate::error::InvalidData>;
fn default() -> Self::Type;
}
pub trait ResizeProperty<B: crate::buffer::Buffer + crate::buffer::BufferMut>:
WriteProperty<B>
{
fn resize(buffer: &mut B, value: &Self::Type)
where
B: crate::buffer::BufferResize;
fn try_resize(buffer: &mut B, value: &Self::Type) -> Result<(), crate::error::BufferOverflow>
where
B: crate::buffer::BufferTryResize;
}