input_manager/manager/
builder.rs1use 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}