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: dude.rs
    path of file: ./repos/not_snake_game/src
    
    the code of the file until where you have to start completion: use crate::{
    block, dust, environment, facing::Facing, game_controller, holdable, level::Level, moveable,
    direction, snake, audio, Direction, EntityType, GameObject, Position, assets::GameAssets,
};
use bevy::prelude::*;
use bevy_utils::Instant;
use std::collections::HashMap;
use leafwing_input_manager::prelude::*;

pub struct DudePlugin;
impl Plugin for DudePlugin {
    fn build(&self, app: &mut App) {
        app.add_system_set(
            SystemSet::on_update(crate::AppState::InGame)
                .with_system(player_input.after("handle_input"))
                .with_system(
                    handle_controllers
                        .label("handle_input")
                        .after("store_controller_inputs"),
                )
                .with_system(pause_game.after(handle_controllers))
                .with_system(hop_on_snake)
                .with_system(push_block),
        )
        .add_plugin(InputManagerPlugin::<PlayerAction>::default());
    }
}

#[derive(Actionlike, PartialEq, Eq, Clone, Copy, Hash, Debug)]
pub enum PlayerAction {
    Up,
    Down,
    Left,
    Right,

    ActionUp,
    ActionDown,
    ActionLeft,
    ActionRight,

    Pause,
    Debug1,
    Debug2,
}

impl PlayerAction {
    const DIRECT
    
fn default_input_map() -> InputMap<PlayerAction> {
    use PlayerAction::*;
    let mut input_map = InputMap::default();

    input_map.set_gamepad(Gamepad(0));

    input_map.insert(Pause, KeyCode::Escape);

    // Movement
    input_map.insert(Up, KeyCode::Up);
    input_map.insert(Up, KeyCode::W);
    input_map.insert(Up, GamepadButtonType::DPadUp);

    input_map.insert(Down, KeyCode::Down);
    input_map.insert(Down, KeyCode::S);
    input_map.insert(Down, GamepadButtonType::DPadDown);

    input_map.insert(Left, KeyCode::Left);
    input_map.insert(Left, KeyCode::A);
    input_map.insert(Left, GamepadButtonType::DPadLeft);

    input_map.insert(Right, KeyCode::Right);
    input_map.insert(Right, KeyCode::D);
    input_map.insert(Right, GamepadButtonType::DPadRight);

    // Actions
    input_map.insert(ActionUp, KeyCode::I);
    input_map.insert(ActionUp, GamepadButtonType::North);

    input_map.insert(ActionDown, KeyCode::K);
    input_map.insert(ActionDown, KeyCode::Return);
    input_map.insert(ActionDown, KeyCode::Space);
    input_map.insert(ActionDown, GamepadButtonType::South);

    input_map.insert(ActionLeft, KeyCode::J);
    input_map.insert(ActionLeft, GamepadButtonType::West);

    input_map.insert(ActionRight, KeyCode::L);
    input_map.insert(ActionRight, GamepadButtonType::East);

//  input_map.insert(Debug1, KeyCode::R);
//  input_map.insert(Debug2, KeyCode::F);

    input_map
}