zugferd_code_lists/zugferd_2_3_2/
hybriddocument.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 HybridDocument {
7    /// The hybrid document contains an invoice or credit note
8    ///
9    /// Only applicable in Factur-X / ZUGFeRD
10    TheHybridDocumentContainsAnInvoiceOrCreditNote,
11    /// The hybrid document contains an order
12    ///
13    /// Only applicable in Order-X
14    TheHybridDocumentContainsAnOrder,
15    /// The hybrid document contains an order response
16    ///
17    /// Only applicable in Order-X
18    TheHybridDocumentContainsAnOrderResponse,
19    /// Thy hybrid document contains an order change
20    ///
21    /// Only applicable in Order-X
22    ThyHybridDocumentContainsAnOrderChange,
23}
24
25impl std::fmt::Display for HybridDocument {
26    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
27        write!(f, "{}", <Self as crate::Code>::code(*self))
28    }
29}
30
31impl std::str::FromStr for HybridDocument {
32    type Err = crate::ParseError<Self>;
33    fn from_str(s: &str) -> Result<Self, Self::Err> {
34        <Self as crate::FromCode>::from_code(s)
35            .ok_or_else(|| crate::ParseError::<Self>::new(s.to_owned()))
36    }
37}
38
39impl crate::Code for HybridDocument {
40    fn code(self) -> &'static str {
41        match self {
42            HybridDocument::TheHybridDocumentContainsAnInvoiceOrCreditNote => "INVOICE",
43            HybridDocument::TheHybridDocumentContainsAnOrder => "ORDER",
44            HybridDocument::TheHybridDocumentContainsAnOrderResponse => "ORDER_RESPONSE",
45            HybridDocument::ThyHybridDocumentContainsAnOrderChange => "ORDER_CHANGE",
46        }
47    }
48}
49
50impl crate::Description for HybridDocument {
51    fn description(self) -> &'static str {
52        match self {
53            HybridDocument::TheHybridDocumentContainsAnInvoiceOrCreditNote => {
54                "The hybrid document contains an invoice or credit note"
55            }
56            HybridDocument::TheHybridDocumentContainsAnOrder => {
57                "The hybrid document contains an order"
58            }
59            HybridDocument::TheHybridDocumentContainsAnOrderResponse => {
60                "The hybrid document contains an order response"
61            }
62            HybridDocument::ThyHybridDocumentContainsAnOrderChange => {
63                "Thy hybrid document contains an order change"
64            }
65        }
66    }
67}
68
69impl crate::FromCode for HybridDocument {
70    fn from_code(code: &str) -> Option<Self>
71    where
72        Self: Sized,
73    {
74        match code {
75            "INVOICE" => Some(HybridDocument::TheHybridDocumentContainsAnInvoiceOrCreditNote),
76            "ORDER" => Some(HybridDocument::TheHybridDocumentContainsAnOrder),
77            "ORDER_RESPONSE" => Some(HybridDocument::TheHybridDocumentContainsAnOrderResponse),
78            "ORDER_CHANGE" => Some(HybridDocument::ThyHybridDocumentContainsAnOrderChange),
79            _ => None,
80        }
81    }
82}