use crate::hysteresis::HysteresisState;
use crate::filters::EmaFilter;
#[cfg(feature = "moving-average")]
use crate::filters::MovingAvgFilter;
pub struct State<T> {
pub hysteresis: HysteresisState<T>,
pub ema_filter: Option<EmaFilter>,
#[cfg(feature = "moving-average")]
pub ma_filter: Option<MovingAvgFilter>,
pub last_output: T,
#[cfg(feature = "grab-mode")]
pub grabbed: bool,
#[cfg(feature = "grab-mode")]
pub virtual_value: T,
#[cfg(feature = "grab-mode")]
pub physical_position: T,
#[cfg(feature = "grab-mode")]
pub last_physical: T,
#[cfg(feature = "grab-mode")]
pub passthrough_initialized: bool,
}
impl<T> Default for State<T>
where
T: Default + Copy,
{
fn default() -> Self {
Self {
hysteresis: HysteresisState::default(),
ema_filter: None,
#[cfg(feature = "moving-average")]
ma_filter: None,
last_output: T::default(),
#[cfg(feature = "grab-mode")]
grabbed: false,
#[cfg(feature = "grab-mode")]
virtual_value: T::default(),
#[cfg(feature = "grab-mode")]
physical_position: T::default(),
#[cfg(feature = "grab-mode")]
last_physical: T::default(),
#[cfg(feature = "grab-mode")]
passthrough_initialized: false,
}
}
}