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))
}
}