1use crate::hysteresis::HysteresisState;
2
3use crate::filters::EmaFilter;
4
5#[cfg(feature = "moving-average")]
6use crate::filters::MovingAvgFilter;
7
8pub struct State<T> {
9 pub hysteresis: HysteresisState<T>,
11
12 pub ema_filter: Option<EmaFilter>,
14
15 #[cfg(feature = "moving-average")]
17 pub ma_filter: Option<MovingAvgFilter>,
18
19 pub last_output: T,
21
22 #[cfg(feature = "grab-mode")]
24 pub grabbed: bool,
25
26 #[cfg(feature = "grab-mode")]
28 pub virtual_value: T,
29
30 #[cfg(feature = "grab-mode")]
32 pub physical_position: T,
33
34 #[cfg(feature = "grab-mode")]
36 pub last_physical: T,
37
38 #[cfg(feature = "grab-mode")]
40 pub passthrough_initialized: bool,
41}
42
43impl<T> Default for State<T>
44where
45 T: Default + Copy,
46{
47 fn default() -> Self {
48 Self {
49 hysteresis: HysteresisState::default(),
50 ema_filter: None,
51 #[cfg(feature = "moving-average")]
52 ma_filter: None,
53 last_output: T::default(),
54 #[cfg(feature = "grab-mode")]
55 grabbed: false,
56 #[cfg(feature = "grab-mode")]
57 virtual_value: T::default(),
58 #[cfg(feature = "grab-mode")]
59 physical_position: T::default(),
60 #[cfg(feature = "grab-mode")]
61 last_physical: T::default(),
62 #[cfg(feature = "grab-mode")]
63 passthrough_initialized: false,
64 }
65 }
66}