termrs 0.3.0

Library for builing terminal user interfaces
Documentation
use std::borrow::Cow;

use termrs::{
    render::Margin,
    runtime::{App, AppContext, AppRunResult, DefaultRuntime},
    widget::Widget,
    widgets::{Button, TextBlock, Wrapper},
};

fn main() -> AppRunResult {
    DefaultRuntime::default().run_app_default(Counter::default())
}

#[derive(Debug, Default)]
struct Counter {
    count: u32,
}

#[derive(Clone, Copy)]
enum Message {
    Increment,
}

impl App<Message> for Counter {
    fn update(&mut self, message: Message, context: &mut impl AppContext) {
        match message {
            Message::Increment => {
                self.count += 1;
            }
        };

        if self.count > 10 {
            context.terminate_app();
        }
    }

    fn view(&self) -> impl Widget<Message> {
        let count = &self.count.to_string();

        Wrapper::new(
            Button::new(TextBlock::new(Cow::Owned(format!("{0}", count))))
                .with_on_press(Some(Message::Increment)),
        )
        .with_padding(Margin::from_scratch(3, 10, 0, 0))
    }
}