img_gen_spec/validators/layers/
background.rs1use super::{ColorKind, PreserveAspect};
2
3#[cfg(feature = "pyo3")]
4use pyo3::prelude::*;
5
6use serde::{Deserialize, Serialize};
7
8#[cfg_attr(
11 feature = "pyo3",
12 pyclass(module = "img_gen", get_all, set_all, from_py_object)
13)]
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub struct Background {
16 pub image: Option<String>,
32 #[serde(
35 alias = "linear_gradient",
36 alias = "radial_gradient",
37 alias = "conical_gradient",
38 alias = "linear-gradient",
39 alias = "radial-gradient",
40 alias = "conical-gradient"
41 )]
42 pub color: Option<ColorKind>,
43 #[serde(default = "Background::default_preserve_aspect")]
46 pub preserve_aspect: PreserveAspect,
47}
48
49impl Background {
50 const fn default_preserve_aspect() -> PreserveAspect {
51 PreserveAspect::Off
52 }
53}
54
55impl Default for Background {
56 fn default() -> Self {
57 Self {
58 image: None,
59 color: None,
60 preserve_aspect: Self::default_preserve_aspect(),
61 }
62 }
63}
64
65#[cfg(test)]
66mod test {
67 #![allow(clippy::unwrap_used, clippy::panic)]
68
69 use super::Background;
70
71 #[test]
72 fn duplicate_color_last_wins() {
73 let yaml = "color: red\ncolor: blue\n";
74 let opts = serde_saphyr::options! {
75 duplicate_keys: serde_saphyr::options::DuplicateKeyPolicy::LastWins,
76 };
77 let bg: Background = serde_saphyr::from_str_with_options(yaml, opts).unwrap();
79 assert!(
80 matches!(bg.color.unwrap(), super::ColorKind::SolidColor(sc) if sc.to_tuple() == (0, 0, 255, 255))
81 );
82 }
83}