mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-09 05:06:43 +01:00
wip: slowly putting it back together
This commit is contained in:
parent
7fbb40fad6
commit
461c60d6b3
18 changed files with 788 additions and 774 deletions
|
|
@ -1,16 +1,13 @@
|
|||
//! Rendering of application to display.
|
||||
|
||||
use crate::*;
|
||||
pub(crate) use ratatui::prelude::CrosstermBackend;
|
||||
|
||||
/// Trait for things that are displayed to the user.
|
||||
pub trait Render<'a, T, U>: Send + Sync {
|
||||
fn render (&self, to: &'a mut T) -> Perhaps<U>;
|
||||
/// Render to output.
|
||||
pub trait Render<T, U>: Send + Sync {
|
||||
fn render (&self, context: &mut T) -> Perhaps<U>;
|
||||
}
|
||||
|
||||
/// Options can be rendered optionally.
|
||||
impl<'a, R, T, U> Render<'a, T, U> for Option<R> where R: Render<'a, T, U> {
|
||||
fn render (&self, to: &'a mut T) -> Perhaps<U> {
|
||||
impl<R, T, U> Render<T, U> for Option<R> where R: Render<T, U> {
|
||||
fn render (&self, to: &mut T) -> Perhaps<U> {
|
||||
match self {
|
||||
Some(component) => component.render(to),
|
||||
None => Ok(None)
|
||||
|
|
@ -19,43 +16,43 @@ impl<'a, R, T, U> Render<'a, T, U> for Option<R> where R: Render<'a, T, U> {
|
|||
}
|
||||
|
||||
/// Boxed references can be rendered.
|
||||
impl<'a, T, U> Render<'a, T, U> for Box<dyn Render<'a, T, U> + 'a> {
|
||||
fn render (&self, to: &'a mut T) -> Perhaps<U> {
|
||||
impl<'a, T, U> Render<T, U> for Box<dyn Render<T, U> + 'a> {
|
||||
fn render (&self, to: &mut T) -> Perhaps<U> {
|
||||
(**self).render(to)
|
||||
}
|
||||
}
|
||||
|
||||
/// Immutable references can be rendered.
|
||||
impl<'a, R, T, U> Render<'a, T, U> for &R where R: Render<'a, T, U> {
|
||||
fn render (&self, to: &'a mut T) -> Perhaps<U> {
|
||||
impl<R, T, U> Render<T, U> for &R where R: Render<T, U> {
|
||||
fn render (&self, to: &mut T) -> Perhaps<U> {
|
||||
(*self).render(to)
|
||||
}
|
||||
}
|
||||
|
||||
/// Mutable references can be rendered.
|
||||
impl<'a, R, T, U> Render<'a, T, U> for &mut R where R: Render<'a, T, U> {
|
||||
fn render (&self, to: &'a mut T) -> Perhaps<U> {
|
||||
impl<R, T, U> Render<T, U> for &mut R where R: Render<T, U> {
|
||||
fn render (&self, to: &mut T) -> Perhaps<U> {
|
||||
(**self).render(to)
|
||||
}
|
||||
}
|
||||
|
||||
/// Counted references can be rendered.
|
||||
impl<'a, R, T, U> Render<'a, T, U> for Arc<R> where R: Render<'a, T, U> {
|
||||
fn render (&self, to: &'a mut T) -> Perhaps<U> {
|
||||
impl<R, T, U> Render<T, U> for Arc<R> where R: Render<T, U> {
|
||||
fn render (&self, to: &mut T) -> Perhaps<U> {
|
||||
self.as_ref().render(to)
|
||||
}
|
||||
}
|
||||
|
||||
/// References behind a [Mutex] can be rendered.
|
||||
impl<'a, R, T, U> Render<'a, T, U> for Mutex<R> where R: Render<'a, T, U> {
|
||||
fn render (&self, to: &'a mut T) -> Perhaps<U> {
|
||||
impl<R, T, U> Render<T, U> for Mutex<R> where R: Render<T, U> {
|
||||
fn render (&self, to: &mut T) -> Perhaps<U> {
|
||||
self.lock().unwrap().render(to)
|
||||
}
|
||||
}
|
||||
|
||||
/// References behind a [RwLock] can be rendered.
|
||||
impl<'a, R, T, U> Render<'a, T, U> for RwLock<R> where R: Render<'a, T, U> {
|
||||
fn render (&self, to: &'a mut T) -> Perhaps<U> {
|
||||
impl<R, T, U> Render<T, U> for RwLock<R> where R: Render<T, U> {
|
||||
fn render (&self, to: &mut T) -> Perhaps<U> {
|
||||
self.read().unwrap().render(to)
|
||||
}
|
||||
}
|
||||
|
|
@ -65,7 +62,7 @@ impl<'a, R, T, U> Render<'a, T, U> for RwLock<R> where R: Render<'a, T, U> {
|
|||
/// Rendering unboxed closures should also be possible;
|
||||
/// but in practice implementing the trait for an unboxed
|
||||
/// `Fn` closure causes an impl conflict.
|
||||
impl<'a, T, U> Render<'a, T, U> for Box<dyn Fn(&mut T) -> Perhaps<U> + Send + Sync + 'a> {
|
||||
impl<'a, T, U> Render<T, U> for Box<dyn Fn(&mut T) -> Perhaps<U> + Send + Sync + 'a> {
|
||||
fn render (&self, to: &mut T) -> Perhaps<U> {
|
||||
(*self)(to)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue