fcm_service/domain/android_config/
light_settings.rs1use 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}