charming_fork_zephyr/element/
padding.rs

1use serde::{ser::SerializeSeq, Serialize};
2
3/// Padding space around content.
4pub enum Padding {
5    /// Set padding of all sides.
6    Single(i64),
7    /// Set top and bottom padding to the first value, and left and right
8    /// padding to the second value.
9    Double(i64, i64),
10    /// Set top, bottom, left and right padding separately.
11    Quadruple(i64, i64, i64, i64),
12}
13
14impl Serialize for Padding {
15    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
16        match self {
17            Padding::Single(padding) => serializer.serialize_i64(*padding),
18            Padding::Double(top_bottom, left_right) => {
19                let mut s = serializer.serialize_seq(Some(2))?;
20                s.serialize_element(top_bottom)?;
21                s.serialize_element(left_right)?;
22                s.end()
23            }
24            Padding::Quadruple(top, right, bottom, left) => {
25                let mut s = serializer.serialize_seq(Some(4))?;
26                s.serialize_element(top)?;
27                s.serialize_element(right)?;
28                s.serialize_element(bottom)?;
29                s.serialize_element(left)?;
30                s.end()
31            }
32        }
33    }
34}
35
36impl From<i64> for Padding {
37    fn from(padding: i64) -> Self {
38        Padding::Single(padding)
39    }
40}
41
42
43impl From<(i64, i64)> for Padding {
44    fn from(padding: (i64, i64)) -> Self {
45        Padding::Double(padding.0, padding.1)
46    }
47}
48
49impl From<(i64, i64, i64, i64)> for Padding {
50    fn from(padding: (i64, i64, i64, i64)) -> Self {
51        Padding::Quadruple(padding.0, padding.1, padding.2, padding.3)
52    }
53}