zugferd_code_lists/zugferd_2_3_3/
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 = ();
33    fn from_str(s: &str) -> Result<Self, Self::Err> {
34        <Self as crate::FromCode>::from_code(s).ok_or(())
35    }
36}
37
38impl crate::Code for HybridDocument {
39    fn code(self) -> &'static str {
40        match self {
41            HybridDocument::TheHybridDocumentContainsAnInvoiceOrCreditNote => "INVOICE",
42            HybridDocument::TheHybridDocumentContainsAnOrder => "ORDER",
43            HybridDocument::TheHybridDocumentContainsAnOrderResponse => "ORDER_RESPONSE",
44            HybridDocument::ThyHybridDocumentContainsAnOrderChange => "ORDER_CHANGE",
45        }
46    }
47}
48
49impl crate::Description for HybridDocument {
50    fn description(self) -> &'static str {
51        match self {
52            HybridDocument::TheHybridDocumentContainsAnInvoiceOrCreditNote => {
53                "The hybrid document contains an invoice or credit note"
54            }
55            HybridDocument::TheHybridDocumentContainsAnOrder => {
56                "The hybrid document contains an order"
57            }
58            HybridDocument::TheHybridDocumentContainsAnOrderResponse => {
59                "The hybrid document contains an order response"
60            }
61            HybridDocument::ThyHybridDocumentContainsAnOrderChange => {
62                "Thy hybrid document contains an order change"
63            }
64        }
65    }
66}
67
68impl crate::FromCode for HybridDocument {
69    fn from_code(code: &str) -> Option<Self>
70    where
71        Self: Sized,
72    {
73        match code {
74            "INVOICE" => Some(HybridDocument::TheHybridDocumentContainsAnInvoiceOrCreditNote),
75            "ORDER" => Some(HybridDocument::TheHybridDocumentContainsAnOrder),
76            "ORDER_RESPONSE" => Some(HybridDocument::TheHybridDocumentContainsAnOrderResponse),
77            "ORDER_CHANGE" => Some(HybridDocument::ThyHybridDocumentContainsAnOrderChange),
78            _ => None,
79        }
80    }
81}