zugferd_code_lists/zugferd_2_3_3/
hybriddocument.rs1#![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 TheHybridDocumentContainsAnInvoiceOrCreditNote,
11 TheHybridDocumentContainsAnOrder,
15 TheHybridDocumentContainsAnOrderResponse,
19 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}