hyperlog/crates/hyperlog-tui/src/commands.rs
kjuulh ed5a5db7c5
feat: implement command mode
Signed-off-by: kjuulh <contact@kjuulh.io>
2024-05-09 00:15:42 +02:00

32 lines
562 B
Rust

use crate::models::Msg;
pub trait IntoCommand {
fn into_command(self) -> Command;
}
impl IntoCommand for () {
fn into_command(self) -> Command {
Command::new(|| None)
}
}
impl IntoCommand for Command {
fn into_command(self) -> Command {
self
}
}
pub struct Command {
func: Box<dyn FnOnce() -> Option<Msg>>,
}
impl Command {
pub fn new<T: FnOnce() -> Option<Msg> + 'static>(f: T) -> Self {
Self { func: Box::new(f) }
}
pub fn execute(self) -> Option<Msg> {
self.func.call_once(())
}
}