bevy/crates/bevy_input/src
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
..
axis.rs Improve doc formatting. (#9840) 2023-09-18 19:43:56 +00:00
button_input.rs bevy_input: allow use without bevy_reflect (#14167) 2024-07-08 01:09:07 +00:00
common_conditions.rs Fix cyclic dep (#11523) 2024-01-25 17:44:32 +00:00
gamepad.rs bevy_input: allow use without bevy_reflect (#14167) 2024-07-08 01:09:07 +00:00
gestures.rs bevy_input: allow use without bevy_reflect (#14167) 2024-07-08 01:09:07 +00:00
keyboard.rs feature: Derive Hash for KeyboardInput. (#14263) 2024-07-23 12:29:15 +00:00
lib.rs bevy_input: allow use without bevy_reflect (#14167) 2024-07-08 01:09:07 +00:00
mouse.rs bevy_input: allow use without bevy_reflect (#14167) 2024-07-08 01:09:07 +00:00
touch.rs bevy_input: allow use without bevy_reflect (#14167) 2024-07-08 01:09:07 +00:00