docx_reader/types/
width_type.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use serde::Serialize;
use std::fmt;
use std::str::FromStr;

use super::errors;

#[derive(Copy, Clone, Debug, PartialEq, Serialize)]
#[serde(rename_all = "camelCase")]
pub enum WidthType {
	Dxa,
	Auto,
	Pct,
	Nil,
	Unsupported,
}

impl fmt::Display for WidthType {
	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
		match *self {
			WidthType::Dxa => write!(f, "dxa"),
			WidthType::Auto => write!(f, "auto"),
			WidthType::Pct => write!(f, "pct"),
			WidthType::Nil => write!(f, "nil"),
			WidthType::Unsupported => write!(f, "unsupported"),
		}
	}
}

impl FromStr for WidthType {
	type Err = errors::TypeError;
	fn from_str(s: &str) -> Result<Self, Self::Err> {
		// https://github.com/bokuweb/docx-rs/issues/451
		match s {
			"DXA" | "dxa" => Ok(WidthType::Dxa),
			"Auto" | "auto" => Ok(WidthType::Auto),
			"Pct" | "pct" => Ok(WidthType::Pct),
			"Nil" | "nil" => Ok(WidthType::Nil),
			_ => Ok(WidthType::Unsupported),
		}
	}
}