zugferd_code_lists/zugferd_2_3_3/
filename.rs

1#![allow(non_camel_case_types)]
2
3#[cfg_attr(feature = "specta", derive(specta::Type))]
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)]
6pub enum Filename {
7    /// The hybrid document contains a Factur-X / ZUGFeRD XML-file
8    ///
9    /// The ConformanceLevel MUST not be XRECHNUNG
10    TheHybridDocumentContainsAFacturXZugferdXmlFile,
11    /// The hybrid document contains a XRechnung XML file
12    ///
13    /// The ConformanceLevel MUST be XRECHNUNG
14    TheHybridDocumentContainsAXrechnungXmlFile,
15    /// The hybrid document contains an Order-X XML file
16    TheHybridDocumentContainsAnOrderXXmlFile,
17}
18
19impl std::fmt::Display for Filename {
20    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21        write!(f, "{}", <Self as crate::Code>::code(*self))
22    }
23}
24
25impl std::str::FromStr for Filename {
26    type Err = crate::ParseError<Self>;
27    fn from_str(s: &str) -> Result<Self, Self::Err> {
28        <Self as crate::FromCode>::from_code(s)
29            .ok_or_else(|| crate::ParseError::<Self>::new(s.to_owned()))
30    }
31}
32
33impl crate::Code for Filename {
34    fn code(self) -> &'static str {
35        match self {
36            Filename::TheHybridDocumentContainsAFacturXZugferdXmlFile => "factur-x.xml",
37            Filename::TheHybridDocumentContainsAXrechnungXmlFile => "xrechnung.xml",
38            Filename::TheHybridDocumentContainsAnOrderXXmlFile => "order-x.xml",
39        }
40    }
41}
42
43impl crate::Description for Filename {
44    fn description(self) -> &'static str {
45        match self {
46            Filename::TheHybridDocumentContainsAFacturXZugferdXmlFile => {
47                "The hybrid document contains a Factur-X / ZUGFeRD XML-file"
48            }
49            Filename::TheHybridDocumentContainsAXrechnungXmlFile => {
50                "The hybrid document contains a XRechnung XML file"
51            }
52            Filename::TheHybridDocumentContainsAnOrderXXmlFile => {
53                "The hybrid document contains an Order-X XML file"
54            }
55        }
56    }
57}
58
59impl crate::FromCode for Filename {
60    fn from_code(code: &str) -> Option<Self>
61    where
62        Self: Sized,
63    {
64        match code {
65            "factur-x.xml" => Some(Filename::TheHybridDocumentContainsAFacturXZugferdXmlFile),
66            "xrechnung.xml" => Some(Filename::TheHybridDocumentContainsAXrechnungXmlFile),
67            "order-x.xml" => Some(Filename::TheHybridDocumentContainsAnOrderXXmlFile),
68            _ => None,
69        }
70    }
71}