pdf_rs/
vpdf.rs

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);