1use hard_xml::{XmlRead, XmlWrite};
2use std::borrow::Cow;
3
4use crate::{__string_enum, __xml_test_suites};
5
6#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
19#[cfg_attr(test, derive(PartialEq))]
20#[xml(tag = "w:color")]
21pub struct Color<'a> {
22 #[xml(attr = "w:val")]
23 pub value: Cow<'a, str>,
24}
25
26impl<'a> From<&'a str> for Color<'a> {
27 fn from(val: &'a str) -> Self {
28 Color {
29 value: Cow::Borrowed(val),
30 }
31 }
32}
33
34impl From<String> for Color<'_> {
35 fn from(val: String) -> Self {
36 Color {
37 value: Cow::Owned(val),
38 }
39 }
40}
41
42impl From<u32> for Color<'_> {
43 fn from(val: u32) -> Self {
44 Color {
45 value: Cow::Owned(format!("{:06x}", val)),
46 }
47 }
48}
49
50impl From<(u8, u8, u8)> for Color<'_> {
51 fn from(val: (u8, u8, u8)) -> Self {
52 Color {
53 value: Cow::Owned(format!("{:02x}{:02x}{:02x}", val.0, val.1, val.2)),
54 }
55 }
56}
57
58#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
59#[cfg_attr(test, derive(PartialEq))]
60#[xml(tag = "w:highlight")]
61pub struct Highlight {
62 #[xml(attr = "w:val")]
63 pub value: Option<HighlightType>,
64}
65
66#[derive(Debug, Clone)]
67#[cfg_attr(test, derive(PartialEq))]
68pub enum HighlightType {
69 Black, Blue, Cyan, Green, Magenta, Red, Yellow, White, DarkBlue, DarkCyan, DarkGreen, DarkMagenta, DarkRed, DarkYellow, DarkGray, LightGray, None, }
87
88__string_enum! {
89 HighlightType {
90 Black = "black",
91 Blue = "blue",
92 Cyan = "cyan",
93 Green = "green",
94 Magenta = "magenta",
95 Red = "red",
96 Yellow = "yellow",
97 White = "white",
98 DarkBlue = "darkBlue",
99 DarkCyan = "darkCyan",
100 DarkGreen = "darkGreen",
101 DarkMagenta = "darkMagenta",
102 DarkRed = "darkRed",
103 DarkYellow = "darkYellow",
104 DarkGray = "darkGray",
105 LightGray = "lightGray",
106 None = "none",
107 }
108}
109
110#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
111#[cfg_attr(test, derive(PartialEq))]
112#[xml(tag = "w:vertAlign")]
113pub struct VertAlign {
114 #[xml(attr = "w:val")]
115 pub value: Option<VertAlignType>,
116}
117
118#[derive(Debug, Clone)]
119#[cfg_attr(test, derive(PartialEq))]
120pub enum VertAlignType {
121 Baseline, Superscript, Subscript, }
125
126__string_enum! {
127 VertAlignType {
128 Baseline = "baseline",
129 Subscript = "subscript",
130 Superscript = "superscript",
131 }
132}
133
134__xml_test_suites!(
135 Color,
136 Color::from("000000"),
137 r#"<w:color w:val="000000"/>"#,
138 Color::from(0u32),
139 r#"<w:color w:val="000000"/>"#,
140 Color::from((0u8, 0u8, 0u8)),
141 r#"<w:color w:val="000000"/>"#,
142);