bevy/crates
Shane Celis 8a79185880
feature: Derive Hash for KeyboardInput. (#14263)
# Objective

Derive `Hash` for `KeyboardInput`.

## Problem

I was [writing code](https://github.com/joshka/bevy_ratatui/pull/13) to
take `crossterm` events and republish them as bevy input events. One
scenario requires I check if the same key press was happening
repeatedly; in a regular terminal we don't get key released events, so I
was simulating them.

I was surprised to find that I couldn't put `KeyboardInput` into a
`HashSet`.

## Work Around

My work around was to add a new type that implemented Hash.

```rust
#[derive(Deref, DerefMut, PartialEq, Eq)]
struct KeyInput(KeyboardInput);

impl Hash for KeyInput {
    fn hash<H>(&self, state: &mut H)
    where
        H: Hasher,
    {
        self.key_code.hash(state);
        self.logical_key.hash(state);
        self.state.hash(state);
        self.window.hash(state);
    }
}
```

## Solution

A better solution since all members of `KeyboardInput` implement `Hash`
is to have it derive `Hash` as well.

## Testing

My newtype solution works for its purpose.

---------

Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com>
Co-authored-by: Josh McKinney <joshka@users.noreply.github.com>
Co-authored-by: BD103 <59022059+BD103@users.noreply.github.com>
2024-07-23 12:29:15 +00:00
..
bevy_a11y Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_animation Fix repeated animation transition bug (#14411) 2024-07-22 19:17:46 +00:00
bevy_app Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_asset Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_audio Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_color Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_core Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_core_pipeline Fixup Msaa docs. (#14442) 2024-07-22 21:37:25 +00:00
bevy_derive Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_dev_tools Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_diagnostic Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_dylib Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_dynamic_plugin Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_ecs Simplify run conditions (#14441) 2024-07-22 19:21:47 +00:00
bevy_encase_derive Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_gilrs Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_gizmos Don't ignore draw errors (#13240) 2024-07-22 19:22:30 +00:00
bevy_gltf Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_hierarchy Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_input feature: Derive Hash for KeyboardInput. (#14263) 2024-07-23 12:29:15 +00:00
bevy_internal Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_log Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_macro_utils Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_math Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_mikktspace Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_pbr Fixup Msaa docs. (#14442) 2024-07-22 21:37:25 +00:00
bevy_picking Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_ptr Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_reflect Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_render Don't ignore draw errors (#13240) 2024-07-22 19:22:30 +00:00
bevy_scene Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_sprite Don't ignore draw errors (#13240) 2024-07-22 19:22:30 +00:00
bevy_state Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_tasks Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_text feat: expose the default font bytes (#14406) 2024-07-22 19:09:39 +00:00
bevy_time Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_transform Only propagate transforms entities with GlobalTransforms. (#14384) 2024-07-22 19:07:21 +00:00
bevy_ui Add and reflect Default impls for CSS grid types (#14443) 2024-07-22 21:39:59 +00:00
bevy_utils Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_window Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00
bevy_winit Remove manual --cfg docsrs (#14376) 2024-07-22 18:58:04 +00:00