docx_rs/documents/elements/
character_spacing.rs

1use crate::documents::BuildXML;
2use crate::xml_builder::*;
3use std::io::Write;
4
5use serde::*;
6
7#[derive(Debug, Clone, Deserialize, PartialEq)]
8#[serde(rename_all = "camelCase")]
9pub struct CharacterSpacing {
10    value: i32,
11}
12
13impl CharacterSpacing {
14    pub fn new(s: i32) -> CharacterSpacing {
15        Self { value: s }
16    }
17}
18
19impl BuildXML for CharacterSpacing {
20    fn build_to<W: Write>(
21        &self,
22        stream: xml::writer::EventWriter<W>,
23    ) -> xml::writer::Result<xml::writer::EventWriter<W>> {
24        XMLBuilder::from(stream).spacing(self.value)?.into_inner()
25    }
26}
27
28impl Serialize for CharacterSpacing {
29    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
30    where
31        S: Serializer,
32    {
33        serializer.serialize_i32(self.value)
34    }
35}
36
37#[cfg(test)]
38mod tests {
39
40    use super::*;
41    #[cfg(test)]
42    use pretty_assertions::assert_eq;
43    use std::str;
44
45    #[test]
46    fn test_spacing() {
47        let b = CharacterSpacing::new(200).build();
48        assert_eq!(str::from_utf8(&b).unwrap(), r#"<w:spacing w:val="200" />"#);
49    }
50
51    #[test]
52    fn test_spacing_json() {
53        let s = CharacterSpacing { value: 100 };
54        assert_eq!(serde_json::to_string(&s).unwrap(), r#"100"#);
55    }
56}