docx_rust/font_table/
font.rs

1use hard_xml::{XmlRead, XmlWrite};
2use std::borrow::Cow;
3
4use crate::{
5    __setter, __xml_test_suites,
6    font_table::{Charset, Family, Pitch},
7};
8
9/// Font
10///
11/// ```rust
12/// use docx_rust::font_table::*;
13///
14/// let font = Font::new("Arial")
15///     .charset("00")
16///     .family("swiss")
17///     .pitch("variable");
18/// ```
19#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
20#[cfg_attr(test, derive(PartialEq))]
21#[xml(tag = "w:font")]
22pub struct Font<'a> {
23    #[xml(attr = "w:name")]
24    pub name: Cow<'a, str>,
25    #[xml(child = "w:charset")]
26    pub charset: Option<Charset<'a>>,
27    #[xml(child = "w:family")]
28    pub family: Option<Family<'a>>,
29    #[xml(child = "w:pitch")]
30    pub pitch: Option<Pitch<'a>>,
31}
32
33impl<'a> Font<'a> {
34    __setter!(charset: Option<Charset<'a>>);
35    __setter!(family: Option<Family<'a>>);
36    __setter!(pitch: Option<Pitch<'a>>);
37
38    pub fn new<T: Into<Cow<'a, str>>>(name: T) -> Self {
39        Font {
40            name: name.into(),
41            ..Default::default()
42        }
43    }
44}
45
46impl<'a, T: Into<Cow<'a, str>>> From<T> for Font<'a> {
47    fn from(val: T) -> Self {
48        Font::new(val)
49    }
50}
51
52__xml_test_suites!(
53    Font,
54    Font::new("Arial"),
55    r#"<w:font w:name="Arial"/>"#,
56    Font::new("Arial").charset("00"),
57    r#"<w:font w:name="Arial"><w:charset w:val="00"/></w:font>"#,
58    Font::new("Arial").family("swiss"),
59    r#"<w:font w:name="Arial"><w:family w:val="swiss"/></w:font>"#,
60    Font::new("Arial").pitch("variable"),
61    r#"<w:font w:name="Arial"><w:pitch w:val="variable"/></w:font>"#,
62);