zugferd_code_lists/zugferd_2_3_2/
hybridversion.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 HybridVersion {
7    /// The hybrid document is a Factur-X 1.0* compliant document
8    ///
9    /// Default value for current specification
10    TheHybridDocumentIsAFacturX10CompliantDocument,
11    /// The hybrid document is a ZUGFeRD 1p0 compliant document
12    ///
13    /// Legacy use only. A warning is given if used for a document in the validity period of the current specification
14    TheHybridDocumentIsAZugferd1p0CompliantDocument,
15    /// The hybrid document is a ZUGFeRD 2p0 compliant document
16    ///
17    /// Legacy use only. A warning is given if used for a document in the validity period of the current specification
18    TheHybridDocumentIsAZugferd2p0CompliantDocument,
19    /// The hybrid document is a ZUGFeRD 2p1 compliant document
20    ///
21    /// Legacy use only. A warning is given if used for a document in the validity period of the current specification
22    TheHybridDocumentIsAZugferd2p1CompliantDocument,
23    /// The hybrid document is a ZUGFeRD 2p2 compliant document
24    ///
25    /// Legacy use only. A warning is given if used for a document in the validity period of the current specification
26    TheHybridDocumentIsAZugferd2p2CompliantDocument,
27}
28
29impl std::fmt::Display for HybridVersion {
30    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
31        write!(f, "{}", <Self as crate::Code>::code(*self))
32    }
33}
34
35impl std::str::FromStr for HybridVersion {
36    type Err = crate::ParseError<Self>;
37    fn from_str(s: &str) -> Result<Self, Self::Err> {
38        <Self as crate::FromCode>::from_code(s)
39            .ok_or_else(|| crate::ParseError::<Self>::new(s.to_owned()))
40    }
41}
42
43impl crate::Code for HybridVersion {
44    fn code(self) -> &'static str {
45        match self {
46            HybridVersion::TheHybridDocumentIsAFacturX10CompliantDocument => "1.0",
47            HybridVersion::TheHybridDocumentIsAZugferd1p0CompliantDocument => "1p0",
48            HybridVersion::TheHybridDocumentIsAZugferd2p0CompliantDocument => "2p0",
49            HybridVersion::TheHybridDocumentIsAZugferd2p1CompliantDocument => "2p1",
50            HybridVersion::TheHybridDocumentIsAZugferd2p2CompliantDocument => "2p2",
51        }
52    }
53}
54
55impl crate::Description for HybridVersion {
56    fn description(self) -> &'static str {
57        match self {
58            HybridVersion::TheHybridDocumentIsAFacturX10CompliantDocument => {
59                "The hybrid document is a Factur-X 1.0* compliant document"
60            }
61            HybridVersion::TheHybridDocumentIsAZugferd1p0CompliantDocument => {
62                "The hybrid document is a ZUGFeRD 1p0 compliant document"
63            }
64            HybridVersion::TheHybridDocumentIsAZugferd2p0CompliantDocument => {
65                "The hybrid document is a ZUGFeRD 2p0 compliant document"
66            }
67            HybridVersion::TheHybridDocumentIsAZugferd2p1CompliantDocument => {
68                "The hybrid document is a ZUGFeRD 2p1 compliant document"
69            }
70            HybridVersion::TheHybridDocumentIsAZugferd2p2CompliantDocument => {
71                "The hybrid document is a ZUGFeRD 2p2 compliant document"
72            }
73        }
74    }
75}
76
77impl crate::FromCode for HybridVersion {
78    fn from_code(code: &str) -> Option<Self>
79    where
80        Self: Sized,
81    {
82        match code {
83            "1.0" => Some(HybridVersion::TheHybridDocumentIsAFacturX10CompliantDocument),
84            "1p0" => Some(HybridVersion::TheHybridDocumentIsAZugferd1p0CompliantDocument),
85            "2p0" => Some(HybridVersion::TheHybridDocumentIsAZugferd2p0CompliantDocument),
86            "2p1" => Some(HybridVersion::TheHybridDocumentIsAZugferd2p1CompliantDocument),
87            "2p2" => Some(HybridVersion::TheHybridDocumentIsAZugferd2p2CompliantDocument),
88            _ => None,
89        }
90    }
91}