1use std::fmt::Display;
2use crate::error::{Error, error_kind};
3
4macro_rules! pdf_version {
5 ($(($name:ident,$version:literal)),+$(,)?) => {
6 #[derive(PartialEq,Debug)]
7 pub enum PDFVersion{
8 $(
9 $name,
10 )+
11 }
12
13 impl TryFrom<&str> for PDFVersion{
14 type Error = Error;
15 fn try_from(value: &str) -> Result<Self, Self::Error> {
16 match value.as_ref() {
17 $(
18 $version => Ok(PDFVersion::$name),
19 )+
20 _ => Err(error_kind::INVALID_PDF_VERSION.into()),
21 }
22 }
23 }
24
25 impl TryFrom<String> for PDFVersion{
26 type Error = Error;
27 fn try_from(value: String) -> Result<Self, Self::Error> {
28 PDFVersion::try_from(value.as_str())
29 }
30 }
31
32 impl Display for PDFVersion{
33 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
34 match self{
35 $(
36 PDFVersion::$name=>write!(f,"{}",$version),
37 )+
38 }
39 }
40 }
41 }
42}
43
44pdf_version!(
45 (V1_0, "1.0"),
46 (V1_1, "1.1"),
47 (V1_2, "1.2"),
48 (V1_3, "1.3"),
49 (V1_4, "1.4"),
50 (V1_5, "1.5"),
51 (V1_6, "1.6"),
52 (V1_7, "1.7"),
53 (V2_0, "2.0")
54);