1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use std::{collections::HashMap, hash::Hash};

pub struct Axis<T> {
    axis_data: HashMap<T, f32>,
}

impl<T> Default for Axis<T>
where
    T: Copy + Eq + Hash,
{
    fn default() -> Self {
        Axis {
            axis_data: HashMap::new(),
        }
    }
}

impl<T> Axis<T>
where
    T: Copy + Eq + Hash,
{
    pub fn set(&mut self, axis: T, value: f32) -> Option<f32> {
        self.axis_data.insert(axis, value)
    }

    pub fn get(&self, axis: &T) -> Option<f32> {
        self.axis_data.get(axis).copied()
    }

    pub fn remove(&mut self, axis: &T) -> Option<f32> {
        self.axis_data.remove(axis)
    }
}