charming_fork_zephyr/element/
icon.rs1use 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}