hitman 0.12.1

A command line tool for hitting API endpoints
Documentation
use crossterm::event::{Event, KeyCode, KeyEvent, KeyEventKind, KeyModifiers};

pub enum KeyMapping {
    None,

    Up,
    Down,
    Left,
    Right,
    Abort,
    Accept,
    Tab,
    ScrollUp,
    ScrollDown,
    SelectTarget,
    ToggleHelp,
    ToggleWrap,
    ToggleHeaders,
    Reload,
    Editor,
    New,
    IncreaseWidth,
    DecreaseWitdh,
}

pub fn mapkey(event: &Event) -> KeyMapping {
    if let Event::Key(key) = event {
        if key.kind == KeyEventKind::Press {
            return mapkey_keypress(key);
        }
    }

    KeyMapping::None
}

fn mapkey_keypress(key: &KeyEvent) -> KeyMapping {
    use KeyCode::*;

    #[allow(clippy::match_same_arms)]
    match (key.modifiers, key.code) {
        (KeyModifiers::NONE, Up) => KeyMapping::Up,
        (KeyModifiers::NONE, Down) => KeyMapping::Down,
        (KeyModifiers::NONE, Left) => KeyMapping::Left,
        (KeyModifiers::NONE, Right) => KeyMapping::Right,
        (KeyModifiers::NONE, Esc) => KeyMapping::Abort,
        (KeyModifiers::NONE, Enter) => KeyMapping::Accept,
        (KeyModifiers::NONE, Tab) => KeyMapping::Tab,
        (KeyModifiers::CONTROL, Char('k')) => KeyMapping::Up,
        (KeyModifiers::CONTROL, Char('j')) => KeyMapping::Down,
        (KeyModifiers::CONTROL, Char('h')) => KeyMapping::Left,
        (KeyModifiers::CONTROL, Char('l')) => KeyMapping::Right,
        (KeyModifiers::CONTROL, Char('p')) => KeyMapping::Up,
        (KeyModifiers::CONTROL, Char('n')) => KeyMapping::Down,
        (KeyModifiers::CONTROL, Char('c')) => KeyMapping::Abort,
        (KeyModifiers::CONTROL, Char('u')) => KeyMapping::ScrollUp,
        (KeyModifiers::CONTROL, Char('d')) => KeyMapping::ScrollDown,
        (KeyModifiers::CONTROL, Char('s')) => KeyMapping::SelectTarget,
        (KeyModifiers::CONTROL, Char('r')) => KeyMapping::Reload,
        (KeyModifiers::CONTROL, Char('e')) => KeyMapping::Editor,
        (KeyModifiers::CONTROL, Char('a')) => KeyMapping::New,
        (KeyModifiers::CONTROL, Char(' ')) => KeyMapping::ToggleHeaders,
        (KeyModifiers::NONE, Char('<')) => KeyMapping::DecreaseWitdh,
        (KeyModifiers::NONE, Char('>')) => KeyMapping::IncreaseWidth,
        (KeyModifiers::NONE, Char(';')) => KeyMapping::ToggleWrap,
        (KeyModifiers::NONE, Char(',')) => KeyMapping::ToggleWrap,
        (KeyModifiers::NONE, Char('?')) => KeyMapping::ToggleHelp,

        _ => KeyMapping::None,
    }
}

pub fn keymap_list() -> Vec<(&'static str, &'static str)> {
    vec![
        ("<C-j> or <C-n>", "Select next"),
        ("<C-k> or <C-p>", "Select previous"),
        ("<C-u>", "Scroll up"),
        ("<C-d>", "Scroll down"),
        ("<C-s>", "Select target"),
        ("<C-r>", "Re-scan folder"),
        ("<C-e>", "Edit selected request"),
        ("<C-a>", "New request"),
        ("<Esc> or <C-c>", "Abort"),
        ("<C-space>", "Toggle request headers"),
        (",", "Toggle output wrapping"),
        ("?", "Toggle this help message"),
        ("<", "Increase output width"),
        (">", "Decrease output width"),
    ]
}