wip: broken collect enum

This commit is contained in:
🪞👃🪞 2024-08-21 16:46:31 +03:00
parent bb0230b6e5
commit 72f47bc837
6 changed files with 301 additions and 157 deletions

View file

@ -0,0 +1,41 @@
use crate::*;
pub enum Collected<'a> {
Box(Box<dyn Render + 'a>),
Ref(&'a (dyn Render + 'a)),
None
}
impl<'a> Render for Collected<'a> {
fn render (&self, buf: &mut Buffer, area: Rect) -> Usually<Rect> {
Ok(match self {
Self::Box(item) => (*item).render(buf, area)?,
Self::Ref(item) => (*item).render(buf, area)?,
Self::None => ().render(buf, area)?
})
}
}
pub struct Collection<'a>(Vec<Collected<'a>>);
impl<'a> Collection<'a> {
pub fn new () -> Self {
Self(vec![])
}
}
pub trait Collect<'a> {
fn add_box (self, item: Box<dyn Render>) -> Self;
fn add_ref (self, item: &'a dyn Render) -> Self;
}
impl<'a> Collect<'a> for Collection<'a> {
fn add_box (mut self, item: Box<dyn Render>) -> Self {
self.0.push(Collected::Box(item));
self
}
fn add_ref (mut self, item: &'a dyn Render) -> Self {
self.0.push(Collected::Ref(item));
self
}
}