use serde::Deserialize;
use crate::errors::Error;
use crate::platform::Modifiers;
#[derive(Clone, Debug, Deserialize)]
pub enum SwipeGestureDirection {
Natural,
Reversed,
}
#[derive(Deserialize, Clone, Debug, Default)]
pub struct SwipeOptions {
pub sensitivity: Option<f64>,
pub deceleration: Option<f64>,
#[allow(dead_code)]
pub continuous: Option<bool>,
pub gesture: Option<GestureOptions>,
pub scroll: Option<ScrollOptions>,
}
#[derive(Deserialize, Clone, Debug, Default)]
pub struct GestureOptions {
pub fingers_count: Option<usize>,
pub direction: Option<SwipeGestureDirection>,
}
#[derive(Deserialize, Clone, Debug, Default)]
pub struct ScrollOptions {
#[serde(default, deserialize_with = "deserialize_modifier")]
pub modifier: Option<Modifiers>,
#[serde(default, deserialize_with = "deserialize_modifier")]
pub vertical_modifier: Option<Modifiers>,
}
fn deserialize_modifier<'de, D>(deserializer: D) -> Result<Option<Modifiers>, D::Error>
where
D: serde::Deserializer<'de>,
{
let Some(s) = Option::<String>::deserialize(deserializer)? else {
return Ok(None);
};
super::parse_modifiers(&s)
.map(Some)
.map_err(|e: Error| serde::de::Error::custom(e.to_string()))
}