#![allow(non_camel_case_types)]
#[cfg_attr(feature = "specta", derive(specta::Type))]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)]
pub enum HybridVersion {
TheHybridDocumentIsAFacturX10CompliantDocument,
TheHybridDocumentIsAZugferd1p0CompliantDocument,
TheHybridDocumentIsAZugferd2p0CompliantDocument,
TheHybridDocumentIsAZugferd2p1CompliantDocument,
TheHybridDocumentIsAZugferd2p2CompliantDocument,
}
impl std::fmt::Display for HybridVersion {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", <Self as crate::Code>::code(*self))
}
}
impl std::str::FromStr for HybridVersion {
type Err = crate::ParseError<Self>;
fn from_str(s: &str) -> Result<Self, Self::Err> {
<Self as crate::FromCode>::from_code(s)
.ok_or_else(|| crate::ParseError::<Self>::new(s.to_owned()))
}
}
impl crate::Code for HybridVersion {
fn code(self) -> &'static str {
match self {
HybridVersion::TheHybridDocumentIsAFacturX10CompliantDocument => "1.0",
HybridVersion::TheHybridDocumentIsAZugferd1p0CompliantDocument => "1p0",
HybridVersion::TheHybridDocumentIsAZugferd2p0CompliantDocument => "2p0",
HybridVersion::TheHybridDocumentIsAZugferd2p1CompliantDocument => "2p1",
HybridVersion::TheHybridDocumentIsAZugferd2p2CompliantDocument => "2p2",
}
}
}
impl crate::Description for HybridVersion {
fn description(self) -> &'static str {
match self {
HybridVersion::TheHybridDocumentIsAFacturX10CompliantDocument => {
"The hybrid document is a Factur-X 1.0* compliant document"
}
HybridVersion::TheHybridDocumentIsAZugferd1p0CompliantDocument => {
"The hybrid document is a ZUGFeRD 1p0 compliant document"
}
HybridVersion::TheHybridDocumentIsAZugferd2p0CompliantDocument => {
"The hybrid document is a ZUGFeRD 2p0 compliant document"
}
HybridVersion::TheHybridDocumentIsAZugferd2p1CompliantDocument => {
"The hybrid document is a ZUGFeRD 2p1 compliant document"
}
HybridVersion::TheHybridDocumentIsAZugferd2p2CompliantDocument => {
"The hybrid document is a ZUGFeRD 2p2 compliant document"
}
}
}
}
impl crate::FromCode for HybridVersion {
fn from_code(code: &str) -> Option<Self>
where
Self: Sized,
{
match code {
"1.0" => Some(HybridVersion::TheHybridDocumentIsAFacturX10CompliantDocument),
"1p0" => Some(HybridVersion::TheHybridDocumentIsAZugferd1p0CompliantDocument),
"2p0" => Some(HybridVersion::TheHybridDocumentIsAZugferd2p0CompliantDocument),
"2p1" => Some(HybridVersion::TheHybridDocumentIsAZugferd2p1CompliantDocument),
"2p2" => Some(HybridVersion::TheHybridDocumentIsAZugferd2p2CompliantDocument),
_ => None,
}
}
}