fcm_service/domain/android_config/
light_settings.rs

1use serde::{Deserialize, Serialize, Serializer};
2
3#[derive(Serialize, Deserialize, Clone, Debug)]
4pub struct Color {
5    #[serde(serialize_with = "serialize_clamped_f32")]
6    pub red: f32,
7    #[serde(serialize_with = "serialize_clamped_f32")]
8    pub green: f32,
9    #[serde(serialize_with = "serialize_clamped_f32")]
10    pub blue: f32,
11    #[serde(serialize_with = "serialize_clamped_f32")]
12    pub alpha: f32,
13}
14impl Default for Color {
15    fn default() -> Self {
16        Self {
17            red: 0.0,
18            green: 0.0,
19            blue: 0.0,
20            alpha: 1.0,
21        }
22    }
23}
24fn serialize_clamped_f32<S>(value: &f32, serializer: S) -> Result<S::Ok, S::Error>
25where
26    S: Serializer,
27{
28    if *value < 0.0 || *value > 1.0 {
29        return Err(serde::ser::Error::custom(format!(
30            "Color value {} must be between 0.0 and 1.0",
31            value
32        )));
33    }
34    serializer.serialize_f32(*value)
35}
36
37#[derive(Serialize, Deserialize, Default, Clone, Debug)]
38pub struct LightSettings {
39    pub color: Color,
40    pub light_on_duration: Option<String>,
41    pub light_off_duration: Option<String>,
42}