fix: collect enum, break: Render for Option<&T>

This commit is contained in:
🪞👃🪞 2024-08-21 18:22:35 +03:00
parent 72f47bc837
commit 33bdf65e8d
8 changed files with 37 additions and 33 deletions

View file

@ -76,23 +76,23 @@ impl Render for () {
}
}
impl<T: Render> Render for &T {
fn render (&self, buf: &mut Buffer, area: Rect) -> Usually<Rect> {
(*self).render(buf, area)
}
fn into_collected <'a> (self) -> Collected<'a> where Self: Sized + 'a {
Collected::Ref(self)
}
}
//impl<T: Render> Render for &T {
//fn render (&self, buf: &mut Buffer, area: Rect) -> Usually<Rect> {
//(*self).render(buf, area)
//}
//fn into_collected <'a> (self) -> Collected<'a> where Self: Sized + 'a {
//Collected::Ref(self)
//}
//}
impl<T: Render> Render for &mut T {
fn render (&self, buf: &mut Buffer, area: Rect) -> Usually<Rect> {
(**self).render(buf, area)
}
fn into_collected <'a> (self) -> Collected<'a> where Self: Sized + 'a {
Collected::Ref(self)
}
}
//impl<T: Render> Render for &mut T {
//fn render (&self, buf: &mut Buffer, area: Rect) -> Usually<Rect> {
//(**self).render(buf, area)
//}
//fn into_collected <'a> (self) -> Collected<'a> where Self: Sized + 'a {
//Collected::Ref(self)
//}
//}
impl<T: Render> Render for Option<T> {
fn render (&self, b: &mut Buffer, a: Rect) -> Usually<Rect> {
@ -103,21 +103,27 @@ impl<T: Render> Render for Option<T> {
}
}
impl Render for Box<dyn Render> {
impl<'a> Render for Box<dyn Render + 'a> {
fn render (&self, buf: &mut Buffer, area: Rect) -> Usually<Rect> {
(**self).render(buf, area)
}
fn into_collected <'a> (self) -> Collected<'a> where Self: Sized + 'a {
fn into_collected <'b> (self) -> Collected<'b> where Self: Sized + 'b {
Collected::Box(self)
}
}
impl Render for Box<dyn Fn(&mut Buffer, Rect) -> Usually<Rect> + Send + Sync> {
impl<'a, T: Fn(&mut Buffer, Rect) -> Usually<Rect> + Send + Sync + 'a> Render for T {
fn render (&self, b: &mut Buffer, a: Rect) -> Usually<Rect> {
(*self)(b, a)
}
}
//impl<'a> Render for Box<dyn Fn(&mut Buffer, Rect) -> Usually<Rect> + Send + Sync + 'a> {
//fn render (&self, b: &mut Buffer, a: Rect) -> Usually<Rect> {
//(*self)(b, a)
//}
//}
impl<T: Render> Render for Arc<Mutex<T>> {
fn render (&self, b: &mut Buffer, a: Rect) -> Usually<Rect> {
self.lock().unwrap().render(b, a)

View file

@ -25,12 +25,12 @@ impl<'a> Collection<'a> {
}
pub trait Collect<'a> {
fn add_box (self, item: Box<dyn Render>) -> Self;
fn add_box (self, item: Box<dyn Render + 'a>) -> 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 {
fn add_box (mut self, item: Box<dyn Render + 'a>) -> Self {
self.0.push(Collected::Box(item));
self
}