use super::*;
use crate::util::{clean_num, Parser};
use edifact_types_macros::{DisplayOuterSegment, ParseSegment};
use nom::{bytes::complete::take_until, character::complete::not_line_ending, IResult};
use serde::{Deserialize, Serialize};
use std::{
fmt::{self, Debug},
str::FromStr,
};
#[derive(Debug, Serialize, Deserialize, Clone, Default, DisplayOuterSegment, ParseSegment)]
pub struct BGM {
pub _010: Option<C002>,
pub _020: Option<C106>,
pub _030: Option<_1225>,
pub _040: Option<_4343>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct CNI {
pub _010: Option<String>,
pub _020: Option<C503>,
pub _030: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct CNT {
pub _010: C270,
}
#[derive(Debug, Serialize, Deserialize, Clone, DisplayOuterSegment, ParseSegment)]
pub struct COD {
pub _010: Option<C823>,
pub _020: Option<C824>,
}
#[derive(Debug, Serialize, Deserialize, DisplayOuterSegment, ParseSegment)]
pub struct COM {
pub _010: C076,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct CPI {
pub _010: Option<C229>,
pub _020: Option<C231>,
pub _030: Option<_4237>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct CTA {
pub _010: Option<_3139>,
pub _020: Option<C056>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct CUX {
pub _010: Option<C504>,
pub _020: Option<C504>,
pub _030: Option<String>,
pub _040: Option<_6341>,
}
#[derive(Debug, Serialize, Deserialize, Clone, DisplayOuterSegment, ParseSegment)]
pub struct DAM {
pub _010: String,
pub _020: Option<C821>,
pub _030: Option<C822>,
pub _040: Option<C825>,
pub _050: Option<C826>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct DGS {
pub _010: Option<String>,
pub _020: Option<C205>,
pub _030: Option<C234>,
pub _040: Option<C223>,
pub _050: Option<String>,
pub _060: Option<String>,
pub _070: Option<String>,
pub _080: Option<String>,
pub _090: Option<C235>,
pub _100: Option<C236>,
pub _110: Option<String>,
pub _120: Option<String>,
pub _130: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone, DisplayOuterSegment, ParseSegment)]
pub struct DIM {
pub _010: String,
pub _020: C211,
}
#[derive(Debug, Serialize, Deserialize, Clone, DisplayOuterSegment, ParseSegment)]
pub struct DOC {
pub _010: Option<C002>,
pub _020: Option<C503>,
pub _030: Option<String>,
pub _040: Option<String>,
pub _050: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone, DisplayOuterSegment, ParseSegment)]
pub struct DTM {
pub _010: C507,
}
#[derive(Debug, Serialize, Deserialize, Clone, DisplayOuterSegment, ParseSegment)]
pub struct EQA {
pub _010: String,
pub _020: Option<C237>,
}
#[derive(Debug, Serialize, Deserialize, Clone, DisplayOuterSegment, ParseSegment)]
pub struct EQD {
pub _010: String,
pub _020: Option<C237>,
pub _030: Option<C224>,
pub _040: Option<String>,
pub _050: Option<String>,
pub _060: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone, DisplayOuterSegment, ParseSegment)]
pub struct EQN {
pub _010: C523,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct FTX {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<C107>,
pub _040: Option<C108>,
pub _050: Option<String>,
pub _060: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone, DisplayOuterSegment, ParseSegment)]
pub struct GDS {
pub _010: C703,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct GID {
pub _010: Option<String>,
pub _020: Option<C213>,
pub _030: Option<C213>,
pub _040: Option<C213>,
pub _050: Option<C213>,
pub _060: Option<C213>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct GIN {
pub _010: String,
pub _020: C208,
pub _030: Option<C208>,
pub _040: Option<C208>,
pub _050: Option<C208>,
pub _060: Option<C208>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct GOR {
pub _010: Option<String>,
pub _020: Option<C232>,
pub _030: Option<C232>,
pub _040: Option<C232>,
pub _050: Option<C232>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct HAN {
pub _010: Option<C524>,
pub _020: Option<C218>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct LOC {
pub _010: String,
pub _020: Option<C517>,
pub _030: Option<C519>,
pub _040: Option<C553>,
pub _050: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct MEA {
pub _010: String,
pub _020: Option<C502>,
pub _030: Option<C174>,
pub _040: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct MOA {
pub _010: C516,
}
#[derive(Debug, Serialize, Deserialize, DisplayOuterSegment, ParseSegment)]
pub struct NAD {
pub _010: _3035,
pub _020: Option<C082>,
pub _030: Option<C058>,
pub _040: Option<C080>,
pub _050: Option<C059>,
pub _060: Option<String>,
pub _070: Option<C819>,
pub _080: Option<String>,
pub _090: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct PIA {
pub _010: String,
pub _020: C212,
pub _030: Option<C212>,
pub _040: Option<C212>,
pub _050: Option<C212>,
pub _060: Option<C212>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct PCD {
pub _010: C501,
pub _020: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct PCI {
pub _010: Option<String>,
pub _020: Option<C210>,
pub _030: Option<String>,
pub _040: Option<C827>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct PRI {
pub _010: Option<C509>,
pub _020: Option<_5213>,
}
#[derive(Debug, Serialize, Deserialize, DisplayOuterSegment, ParseSegment)]
pub struct QTY {
pub _010: C186,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct RFF {
pub _010: C506,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct RNG {
pub _010: String,
pub _020: Option<C280>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct SEL {
pub _010: Option<String>,
pub _020: Option<C215>,
pub _030: Option<String>,
pub _040: Option<C208>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct SGP {
pub _010: C237,
pub _020: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct STS {
pub _010: Option<C601>,
pub _020: Option<C555>,
pub _030: Option<C556>,
pub _040: Option<C556>,
pub _050: Option<C556>,
pub _060: Option<C556>,
pub _070: Option<C556>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct TCC {
pub _010: Option<C200>,
pub _020: Option<C203>,
pub _030: Option<C528>,
pub _040: Option<C554>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct TDT {
pub _010: String,
pub _020: Option<String>,
pub _030: Option<C220>,
pub _040: Option<C228>,
pub _050: Option<C040>,
pub _060: Option<String>,
pub _070: Option<C401>,
pub _080: Option<C222>,
pub _090: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct TMD {
pub _010: Option<C219>,
pub _020: Option<String>,
pub _030: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct TMP {
pub _010: String,
pub _020: Option<C239>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct TOD {
pub _010: Option<_4055>,
pub _020: Option<_4215>,
pub _030: Option<C100>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct TPL {
pub _010: C222,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct TSR {
pub _010: Option<C536>,
pub _020: Option<C233>,
pub _030: Option<C537>,
pub _040: Option<C703>,
}
#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, Eq, DisplayOuterSegment)]
pub struct UNA {
pub component_data_element_seperator: char,
pub data_element_seperator: char,
pub decimal_notation: char,
pub release_indicator: char,
pub reserved_for_future_use: char,
pub segment_terminator: char,
}
impl<'a> Parser<&'a str, UNA, nom::error::Error<&'a str>> for UNA {
fn parse(input: &'a str) -> IResult<&'a str, UNA> {
let (rest, vars) = take_until("UNB")(input)?;
if vars.is_empty() {
return Err(nom::Err::Error(nom::error::Error::new(
rest,
nom::error::ErrorKind::TakeUntil,
)));
}
let vars = not_line_ending(vars)?.1;
if vars.len() != 9 {
println!("UNA Segment found, but malformed:\n{vars:?}");
panic!("UNA Segment malformed, needs to be exactly 6 characters")
}
let vars = vars.strip_prefix("UNA").unwrap();
let mut vars = vars.chars();
let una = UNA {
component_data_element_seperator: vars.next().unwrap(),
data_element_seperator: vars.next().unwrap(),
decimal_notation: vars.next().unwrap(),
release_indicator: vars.next().unwrap(),
reserved_for_future_use: vars.next().unwrap(),
segment_terminator: vars.next().unwrap(),
};
Ok((rest, una))
}
}
#[derive(
Serialize, Deserialize, Clone, Debug, PartialEq, Eq, Default, DisplayOuterSegment, ParseSegment,
)]
pub struct UNB {
_010: S001,
_020: S002,
_030: S003,
_040: S004,
_050: String,
_060: Option<S005>,
_070: Option<String>,
_080: Option<_0029>,
_090: Option<_0031>,
_100: Option<String>,
_110: Option<_0035>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct UNH {
pub _010: String,
pub _020: S009,
pub _030: Option<String>,
pub _040: Option<S010>,
pub _050: Option<S016>,
pub _060: Option<S017>,
pub _070: Option<S018>,
}
#[derive(Debug, Serialize, Deserialize, Default, DisplayOuterSegment, ParseSegment)]
pub struct UNT {
pub _010: String,
pub _020: String,
}
#[derive(
Serialize, Deserialize, Clone, Default, Debug, PartialEq, Eq, DisplayOuterSegment, ParseSegment,
)]
pub struct UNZ {
_010: String,
_020: String,
}