docx_rs/documents/elements/
character_spacing.rs1use 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}