#[derive(Default)]
pub enum List<'a, A> {
#[default]
Empty,
MessageBuffer(MessageBuffer<'a>),
Slice(&'a [A]),
}
#[derive(Clone, Copy, Debug)]
pub struct MessageBuffer<'a> {
pub tag: u32,
pub data: &'a [u8],
}
impl<'a, A> List<'a, A> {
pub const fn empty() -> Self {
Self::Empty
}
pub const fn from_slice(slice: &'a [A]) -> Self {
List::Slice(slice)
}
pub const fn from_msg_buf(tag: u32, data: &'a [u8]) -> Self {
List::MessageBuffer(MessageBuffer { tag, data })
}
}
impl<'a, A> Clone for List<'a, A> {
fn clone(&self) -> Self {
match *self {
List::Empty => List::Empty,
List::MessageBuffer(ref b) => List::MessageBuffer(b.clone()),
List::Slice(s) => List::Slice(s),
}
}
}
impl<'a, A> Copy for List<'a, A> {}