thank rust for transpose and flatten

This commit is contained in:
🪞👃🪞 2024-09-06 22:00:28 +03:00
parent 93ba611e33
commit a52066f640

View file

@ -8,62 +8,72 @@ impl Rectangle<u16> for Rect {
}
impl<R> Render<Tui> for Min<<Tui as Engine>::Unit, R> where R: Render<Tui> + Layout<Tui> {
fn render (&self, engine: &mut Tui) -> Perhaps<Rect> {
self.layout(engine.area())?
.map(|area|engine.with_area(area.x(), area.y(), area.w(), area.h()))
.map(|engine|engine.render(match self {
fn render (&self, to: &mut Tui) -> Perhaps<Rect> {
self.layout(to.area())?
.map(|area|to.with_area(area.x(), area.y(), area.w(), area.h()))
.map(|to|match self {
Self::W(_, inner) => inner,
Self::H(_, inner) => inner,
Self::WH(_, _, inner) => inner,
}))
}.render(to))
.transpose()
.map(|x|x.flatten())
}
}
impl<R> Render<Tui> for Max<<Tui as Engine>::Unit, R> where R: Render<Tui> + Layout<Tui> {
fn render (&self, engine: &mut Tui) -> Perhaps<Rect> {
self.layout(engine.area())?
.map(|area|engine.with_area(area.x(), area.y(), area.w(), area.h()))
.map(|engine|engine.render(match self {
fn render (&self, to: &mut Tui) -> Perhaps<Rect> {
self.layout(to.area())?
.map(|area|to.with_area(area.x(), area.y(), area.w(), area.h()))
.map(|to|match self {
Self::W(_, inner) => inner,
Self::H(_, inner) => inner,
Self::WH(_, _, inner) => inner,
}))
}.render(to))
.transpose()
.map(|x|x.flatten())
}
}
impl<R> Render<Tui> for Inset<<Tui as Engine>::Unit, R> where R: Render<Tui> + Layout<Tui> {
fn render (&self, engine: &mut Tui) -> Perhaps<Rect> {
self.layout(engine.area())?
.map(|area|engine.with_area(area.x(), area.y(), area.w(), area.h()))
.map(|engine|engine.render(match self {
fn render (&self, to: &mut Tui) -> Perhaps<Rect> {
self.layout(to.area())?
.map(|area|to.with_area(area.x(), area.y(), area.w(), area.h()))
.map(|to|match self {
Self::W(_, inner) => inner,
Self::H(_, inner) => inner,
Self::WH(_, _, inner) => inner,
}))
}.render(to))
.transpose()
.map(|x|x.flatten())
}
}
impl<R> Render<Tui> for Outset<<Tui as Engine>::Unit, R> where R: Render<Tui> + Layout<Tui> {
fn render (&self, engine: &mut Tui) -> Perhaps<Rect> {
self.layout(engine.area())?
.map(|area|engine.with_area(area.x(), area.y(), area.w(), area.h()))
.map(|engine|engine.render(match self {
fn render (&self, to: &mut Tui) -> Perhaps<Rect> {
self.layout(to.area())?
.map(|area|to.with_area(area.x(), area.y(), area.w(), area.h()))
.map(|to|match self {
Self::W(_, inner) => inner,
Self::H(_, inner) => inner,
Self::WH(_, _, inner) => inner,
}))
}.render(to))
.transpose()
.map(|x|x.flatten())
}
}
impl<R> Render<Tui> for Offset<<Tui as Engine>::Unit, R> where R: Render<Tui> + Layout<Tui> {
fn render (&self, engine: &mut Tui) -> Perhaps<Rect> {
self.layout(engine.area())?
.map(|area|engine.with_area(area.x(), area.y(), area.w(), area.h()))
.map(|engine|engine.render(match self {
fn render (&self, to: &mut Tui) -> Perhaps<Rect> {
self.layout(to.area())?
.map(|area|to.with_area(area.x(), area.y(), area.w(), area.h()))
.map(|to|match self {
Self::X(_, inner) => inner,
Self::Y(_, inner) => inner,
Self::XY(_, _, inner) => inner,
}))
}.render(to))
.transpose()
.map(|x|x.flatten())
}
}