rtlibs-tui 0.1.4

rtools library: ratatui widgets
Documentation
use clap::ArgMatches;
use crossterm::event::KeyCode;
use crossterm::event::KeyModifiers;

use crate::widgets::CommanderEvent;
use crate::widgets::KeyEventHandler;
use crate::Result;

use super::AppCommanderCommand;
use super::AppCommanderState;

#[derive(Debug)]
pub enum AppCommanderEvent<'a, T>
where
    T: AppCommanderCommand,
{
    Handled,
    Action(
        &'a mut T,
        ArgMatches,
    ),
}

impl<'a, T> KeyEventHandler<'a, AppCommanderEvent<'a, T>> for AppCommanderState<T>
where
    T: AppCommanderCommand,
{
    fn handle_key_event(
        &'a mut self,
        code: KeyCode,
        modifiers: KeyModifiers,
    ) -> Result<AppCommanderEvent<'a, T>>
    {
        let response = match self
            .commander
            .handle_key_event(
                code, modifiers,
            )?
        {
            CommanderEvent::Handled => AppCommanderEvent::Handled,
            CommanderEvent::Action((name, args)) =>
            {
                for command in self
                    .commands
                    .iter_mut()
                {
                    if command
                        .command()
                        .get_name()
                        .eq(&name)
                    {
                        return Ok(
                            AppCommanderEvent::Action(
                                command, args,
                            ),
                        );
                    }
                }
                //
                AppCommanderEvent::Handled
            }
        };

        Ok(response)
    }
}