#[derive(Debug, PartialEq, Eq)]
pub struct Leaf<'r, T> {
pub entity: &'r T,
pub index: usize,
}
impl<'r, T> Leaf<'r, T> {
pub fn new(entity: &'r T, index: usize) -> Leaf<'r, T> {
Leaf { entity, index }
}
}
impl<T> Copy for Leaf<'_, T> {}
impl<T> Clone for Leaf<'_, T> {
fn clone(&self) -> Self {
*self
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Concat<'r, Left, T> {
pub left: Left,
pub right: Leaf<'r, T>,
}
impl<'r, Left: Copy, T: Copy> Copy for Concat<'r, Left, T> {}
impl<'r, Left, T> Concat<'r, Left, T> {
pub fn new(left: Left, entity: &'r T, index: usize) -> Concat<'r, Left, T> {
Concat {
left,
right: Leaf::new(entity, index),
}
}
}
#[allow(dead_code)]
pub trait Row {
const DEPTH: usize;
}
impl<'r, T> Row for Leaf<'r, T> {
const DEPTH: usize = 1;
}
impl<'r, Left: Row, T> Row for Concat<'r, Left, T> {
const DEPTH: usize = Left::DEPTH + 1;
}