charming_fork_zephyr/element/
icon.rs

1use serde::Serialize;
2
3pub enum Icon {
4    Circle,
5    Rect,
6    RoundRect,
7    Triangle,
8    Diamond,
9    Pin,
10    Arrow,
11    None,
12    Custom(String),
13}
14
15impl Serialize for Icon {
16    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
17        match self {
18            Icon::Circle => serializer.serialize_str("circle"),
19            Icon::Rect => serializer.serialize_str("rect"),
20            Icon::RoundRect => serializer.serialize_str("roundRect"),
21            Icon::Triangle => serializer.serialize_str("triangle"),
22            Icon::Diamond => serializer.serialize_str("diamond"),
23            Icon::Pin => serializer.serialize_str("pin"),
24            Icon::Arrow => serializer.serialize_str("arrow"),
25            Icon::None => serializer.serialize_str("none"),
26            Icon::Custom(s) => serializer.serialize_str(s),
27        }
28    }
29}
30
31impl<S> From<S> for Icon
32where
33    S: Into<String>,
34{
35    fn from(s: S) -> Self {
36        let s = s.into();
37        match s.as_str() {
38            "circle" => Icon::Circle,
39            "rect" => Icon::Rect,
40            "roundRect" => Icon::RoundRect,
41            "triangle" => Icon::Triangle,
42            "diamond" => Icon::Diamond,
43            "pin" => Icon::Pin,
44            "arrow" => Icon::Arrow,
45            "none" => Icon::None,
46            _ => Icon::Custom(s),
47        }
48    }
49}