Skip to main content

flowsurface_data/
config.rs

1use serde::{Deserialize, Deserializer, Serialize};
2
3pub mod auth;
4pub mod network;
5pub mod sidebar;
6pub mod state;
7pub mod theme;
8pub mod timezone;
9
10pub const MIN_SCALE: f32 = 0.8;
11pub const MAX_SCALE: f32 = 1.5;
12
13#[derive(Debug, Clone, Copy, Serialize, PartialEq)]
14pub struct ScaleFactor(f32);
15
16impl Default for ScaleFactor {
17    fn default() -> Self {
18        Self(1.0)
19    }
20}
21
22impl From<f32> for ScaleFactor {
23    fn from(value: f32) -> Self {
24        let value = if value.is_finite() {
25            value.clamp(MIN_SCALE, MAX_SCALE)
26        } else {
27            Self::default().0
28        };
29
30        Self(value)
31    }
32}
33
34impl<'de> Deserialize<'de> for ScaleFactor {
35    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
36    where
37        D: Deserializer<'de>,
38    {
39        let value = f32::deserialize(deserializer)?;
40        Ok(value.into())
41    }
42}
43
44impl From<ScaleFactor> for f32 {
45    fn from(value: ScaleFactor) -> Self {
46        value.0
47    }
48}