zugferd_code_lists/zugferd_2_3_2/
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 = ();
27    fn from_str(s: &str) -> Result<Self, Self::Err> {
28        <Self as crate::FromCode>::from_code(s).ok_or(())
29    }
30}
31
32impl crate::Code for Filename {
33    fn code(self) -> &'static str {
34        match self {
35            Filename::TheHybridDocumentContainsAFacturXZugferdXmlFile => "factur-x.xml",
36            Filename::TheHybridDocumentContainsAXrechnungXmlFile => "xrechnung.xml",
37            Filename::TheHybridDocumentContainsAnOrderXXmlFile => "order-x.xml",
38        }
39    }
40}
41
42impl crate::Description for Filename {
43    fn description(self) -> &'static str {
44        match self {
45            Filename::TheHybridDocumentContainsAFacturXZugferdXmlFile => {
46                "The hybrid document contains a Factur-X / ZUGFeRD XML-file"
47            }
48            Filename::TheHybridDocumentContainsAXrechnungXmlFile => {
49                "The hybrid document contains a XRechnung XML file"
50            }
51            Filename::TheHybridDocumentContainsAnOrderXXmlFile => {
52                "The hybrid document contains an Order-X XML file"
53            }
54        }
55    }
56}
57
58impl crate::FromCode for Filename {
59    fn from_code(code: &str) -> Option<Self>
60    where
61        Self: Sized,
62    {
63        match code {
64            "factur-x.xml" => Some(Filename::TheHybridDocumentContainsAFacturXZugferdXmlFile),
65            "xrechnung.xml" => Some(Filename::TheHybridDocumentContainsAXrechnungXmlFile),
66            "order-x.xml" => Some(Filename::TheHybridDocumentContainsAnOrderXXmlFile),
67            _ => None,
68        }
69    }
70}