use super::*;
use crate::util::{clean_num, Parser};
use edifact_types_macros::{DisplayInnerSegment, ParseElement};
use nom::IResult;
use serde::{Deserialize, Serialize};
use std::{
fmt::{self, Debug},
str::FromStr,
};
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C002 {
pub _010: Option<String>,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C040 {
pub _010: Option<String>,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C056 {
pub _010: Option<String>,
pub _020: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C058 {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
pub _050: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C059 {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C080 {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
pub _050: Option<String>,
pub _060: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C082 {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C107 {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C108 {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
pub _050: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C174 {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
pub _050: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C205 {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C211 {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C215 {
pub _010: Option<String>,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C219 {
pub _010: Option<String>,
pub _020: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C220 {
pub _010: Option<String>,
pub _020: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C222 {
pub _010: Option<String>,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
pub _050: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C223 {
pub _010: Option<String>,
pub _020: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C224 {
pub _010: Option<String>,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C228 {
pub _010: Option<String>,
pub _020: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C234 {
pub _010: Option<String>,
pub _020: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C235 {
pub _010: Option<String>,
pub _020: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C236 {
pub _010: Option<String>,
pub _020: Option<String>,
pub _030: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C237 {
pub _010: Option<String>,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C239 {
pub _010: Option<String>,
pub _020: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C270 {
pub _010: String,
pub _020: String,
pub _030: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C280 {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C401 {
pub _010: String,
pub _020: String,
pub _030: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C502 {
pub _010: Option<String>,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C506 {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C507 {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C517 {
pub _010: Option<String>,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C519 {
pub _010: Option<String>,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C523 {
pub _010: Option<String>,
pub _020: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct C553 {
pub _010: Option<String>,
pub _020: Option<String>,
pub _030: Option<String>,
pub _040: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Clone, DisplayInnerSegment, ParseElement, PartialEq, Eq, Default,
)]
pub struct S001 {
pub _010: _0001,
pub _020: _0002,
}
#[derive(
Debug, Serialize, Deserialize, Clone, Default, DisplayInnerSegment, ParseElement, PartialEq, Eq,
)]
pub struct S002 {
pub _010: String,
pub _020: Option<_0007>,
pub _030: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Clone, Default, DisplayInnerSegment, ParseElement, PartialEq, Eq,
)]
pub struct S003 {
pub _010: String,
pub _020: Option<_0007>,
pub _030: Option<String>,
}
#[derive(
Debug, Serialize, Deserialize, Clone, Default, DisplayInnerSegment, ParseElement, PartialEq, Eq,
)]
pub struct S004 {
pub _010: String,
pub _020: String,
}
#[derive(
Debug, Serialize, Deserialize, Clone, Default, DisplayInnerSegment, ParseElement, PartialEq, Eq,
)]
pub struct S005 {
pub _010: String,
pub _020: Option<_0025>,
}
#[derive(Debug, Serialize, Deserialize, Clone, Default, DisplayInnerSegment)]
pub struct S009 {
pub _010: String,
pub _020: String,
pub _030: String,
pub _040: String,
pub _050: Option<String>,
}
impl<'a> Parser<&'a str, S009, nom::error::Error<&'a str>> for S009 {
fn parse(input: &'a str) -> IResult<&'a str, S009> {
let (_, vars) = crate::util::parse_colon_section(input)?;
let v = vars.get(1).unwrap().to_string();
let r = vars.get(2).unwrap().to_string();
if format!("{v}{r}") != VERSION {
return Err(nom::Err::Error(nom::error::Error::new(
"File supplied EDIFACT Version/Release in UNH segment. Please use the correct parsing feature",
nom::error::ErrorKind::Verify,
)));
}
let output = S009 {
_010: vars.first().unwrap().to_string(),
_020: v,
_030: r,
_040: vars.get(3).unwrap().to_string(),
_050: vars.get(4).map(|x| x.to_string()),
};
Ok(("", output))
}
}
#[derive(
Debug, Serialize, Deserialize, Default, PartialEq, Eq, Clone, DisplayInnerSegment, ParseElement,
)]
pub struct S010 {
pub _010: String,
pub _020: Option<String>,
}