You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: key_bindings.rs
    path of file: ./repos/git-interactive-rebase-tool/src/config
    
    the code of the file until where you have to start completion: use crate::{
	config::{utils::get_input, ConfigError},
	git::Config,
};

fn map_single_ascii_to_lower(s: &str) -> String {
	if s.is_ascii() && s.len() == 1 {
		s.to_lowercase()
	}
	else {
		String::from(s)
	}
}

/// Represents the key binding configuration options.
#[derive(Clone, Debug)]
#[non_exhaustive]
pub(crate) struct KeyBindings {
	/// Key bindings for aborting.
	pub(crate) abort: Vec<String>,
	/// Key bindings for the break action.
	pub(crate) action_break: Vec<String>,
	/// Key bindings for the drop action.
	pub(crate) action_drop: Vec<String>,
	/// Key bindings for the edit action.
	pub(crate) action_edit: Vec<String>,
	/// Key bindings for the fixup action.
	pub(crate) action_fixup: Vec<String>,
	/// Key bindings for the pick action.
	pub(crate) action_pick: Vec<String>,
	/// Key bindings for the reword action.
	pub(crate) action_reword: Vec<String>,
	/// Key bindings for the squash action.
	pub(crate) action_squash: Vec<String>,
	/// Key bindings for negative confirmation.
	pub(crate) confirm_no: Vec<String>,
	/// Key bindings for positive confirmation.
	pub(crate) confirm_yes: Vec<String>,
	/// Key bindings for editing.
	pub(crate) edit: Vec<String>,
	/// Key bindings for forcing a abort.
	pub(crate) force_abort: Vec<String>,
	/// Key bindings for forcing a rebase.
	pub(crate) force_rebase: Vec<String>,
	/// Key bindings for showing help.
	pub(crate) help: Vec<String>,
	/// Key bindings for inserting a line.
	pub(crate) insert_line: Vec<String>,

	/// Key bindings for moving down.
	pub(crate) move_down: Vec<String>,
	/// Key bindings for moving to the end.
	pub(crate) move_end: Vec<String>,
	/// Key bindings for moving to the start.
	pub(crate) move_home: Vec<String>,
	/// Key bindings for moving to the left.
	pub(crate) move_left: Vec<String>,
	/// Key bindings for moving to the right.
	pub(crate) move_right: Vec<String>,
	/// Key bindings for moving up.
	pub(crate) move_up: Vec<String>,
	/// Key bindings for moving down a step.
    
	fn key_bindings() {
		config_test!(abort, "inputAbort", "q");
		config_test!(action_break, "inputActionBreak", "b");
		config_test!(action_drop, "inputActionDrop", "d");
		config_test!(action_edit, "inputActionEdit", "e");
		config_test!(action_fixup, "inputActionFixup", "f");
		config_test!(action_pick, "inputActionPick", "p");
		config_test!(action_reword, "inputActionReword", "r");
		config_test!(action_squash, "inputActionSquash", "s");
		config_test!(confirm_no, "inputConfirmNo", "n");
		config_test!(confirm_yes, "inputConfirmYes", "y");
		config_test!(edit, "inputEdit", "E");
		config_test!(force_abort, "inputForceAbort", "Q");
		config_test!(force_rebase, "inputForceRebase", "W");
		config_test!(help, "inputHelp", "?");
		config_test!(insert_line, "insertLine", "I");
		config_test!(move_down, "inputMoveDown", "Down");
		config_test!(move_end, "inputMoveEnd", "End");
		config_test!(move_home, "inputMoveHome", "Home");
		config_test!(move_left, "inputMoveLeft", "Left");
		config_test!(move_right, "inputMoveRight", "Right");
		config_test!(move_up, "inputMoveUp", "Up");
		config_test!(move_down_step, "inputMoveStepDown", "PageDown");
		config_test!(move_up_step, "inputMoveStepUp", "PageUp");
		config_test!(move_selection_down, "inputMoveSelectionDown", "j");
		config_test!(move_selection_up, "inputMoveSelectionUp", "k");
		config_test!(scroll_down, "inputScrollDown", "Down");
		config_test!(scroll_end, "inputScrollEnd", "End");
		config_test!(scroll_home, "inputScrollHome", "Home");
		config_test!(scroll_left, "inputScrollLeft", "Left");
		config_test!(scroll_right, "inputScrollRight", "Right");
		config_test!(scroll_up, "inputScrollUp", "Up");
		config_test!(scroll_step_down, "inputScrollStepDown", "PageDown");
		config_test!(scroll_step_up, "inputScrollStepUp", "PageUp");
		config_test!(open_in_external_editor, "inputOpenInExternalEditor", "!");
		config_test!(rebase, "inputRebase", "w");
		config_test!(redo, "inputRedo", "Controly");
		config_test!(remove_line, "removeLine", "Delete");
		config_test!(search_start, "searchStart", "/");
		config_test!(search_next, "searchNext", "n");
		config_test!(search_previous, "searchPrevious", "N");
		config_test!(show_commit, "inputShowCommit", "c");
		config_test!(show_diff, "inputShowDiff", "d");
		config_test!(toggle_visual_mode, "inputToggleVisualMode", "v");
		config_test!(undo, "inputUndo", "Controlz");
		config_test!(fixup_keep_message_with_editor, "fixupKeepMessageWithEditor", "U");
		config_test!(fixup_keep_message, "fixupKeepMessage", "u");
	}