input_manager/manager/
builder.rs

1use manager::manager::*;
2use std::hash::Hash;
3pub struct ManagerBuilder<A: Hash + Eq, B: Hash + Eq, C: Hash + Eq> {
4    manager: Manager<A, B, C>,
5}
6
7pub trait IManagerBuilder<A: Hash + Eq, B: Hash + Eq, C: Hash + Eq> {
8    type Product;
9    fn new() -> Self;
10    fn build(self) -> Self::Product;
11    fn add_axis_binding(self, axis: A, input: C) -> Self;
12    fn add_button_binding(self, button: B, input: C) -> Self;
13    fn add_default_change(self, impl Into<Change>, C) -> Self;
14}
15
16impl<A: Hash + Eq + Clone, B: Hash + Eq + Clone, C: Hash + Eq> IManagerBuilder<A, B, C>
17    for ManagerBuilder<A, B, C>
18{
19    type Product = Manager<A, B, C>;
20    fn new() -> ManagerBuilder<A, B, C> {
21        ManagerBuilder {
22            manager: Manager::new(),
23        }
24    }
25    fn build(self) -> Manager<A, B, C> {
26        self.manager
27    }
28    fn add_axis_binding(mut self, axis: A, input: C) -> Self {
29        self.manager.add_axis_binding(axis, input);
30        self
31    }
32    fn add_button_binding(mut self, button: B, input: C) -> Self {
33        self.manager.add_button_binding(button, input);
34        self
35    }
36
37    fn add_default_change(mut self, change: impl Into<Change>, input: C) -> Self {
38        self.manager.add_default_change(change, input);
39        self
40    }
41}