#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub struct Set;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub struct Unset;
#[cfg(any_message)]
pub(super) fn bytes_to_segments(
bytes: &[u8],
) -> Result<Vec<edifact_rs::OwnedSegment>, crate::Error> {
edifact_rs::from_reader(bytes)
.collect::<Result<_, _>>()
.map_err(crate::Error::Parse)
}
#[cfg(any(
feature = "utilmd",
feature = "mscons",
feature = "aperak",
feature = "iftsta",
feature = "insrpt",
feature = "invoic",
feature = "orders",
feature = "partin",
feature = "pricat",
feature = "reqote",
feature = "remadv",
feature = "ordchg",
feature = "ordrsp",
feature = "quotes",
feature = "comdis",
feature = "utilts",
))]
pub(super) fn ccyymmddhhmm_utc(value: &str) -> String {
if value.contains('+') || value.contains('-') {
return value.to_owned();
}
match value.len() {
8 => format!("{value}0000+00"),
_ => format!("{value}+00"),
}
}
#[cfg(any(
feature = "utilmd",
feature = "mscons",
feature = "aperak",
feature = "iftsta",
feature = "insrpt",
feature = "invoic",
feature = "orders",
feature = "partin",
feature = "pricat",
feature = "reqote",
feature = "remadv",
feature = "ordchg",
feature = "ordrsp",
feature = "quotes",
feature = "comdis",
feature = "utilts",
))]
pub(super) fn now_ccyymmddhhmm() -> String {
let now = time::OffsetDateTime::now_utc();
let (y, m, d) = (now.year(), now.month() as u8, now.day());
let (hh, mm) = (now.hour(), now.minute());
format!("{y:04}{m:02}{d:02}{hh:02}{mm:02}")
}
#[cfg(any_message)]
macro_rules! emit_seg {
($writer:expr, $tag:expr, $($elem:expr),+ $(,)?) => {{
let elements: &[&str] = &[$($elem),+];
$writer
.write_simple($tag, elements)
.map_err(|e| $crate::Error::Parse(e.into()))?;
}};
}
#[cfg(any_message)]
macro_rules! emit_comp {
($writer:expr, $tag:expr, $([$($comp:expr),* $(,)?]),+ $(,)?) => {{
let elements: &[&[&str]] = &[$(&[$($comp),*]),+];
$writer
.write_composites($tag, elements)
.map_err(|e| $crate::Error::Parse(e.into()))?;
}};
}
#[cfg(any_message)]
pub(crate) fn agency_for(explicit: Option<crate::AgencyCode>, mp_id: &str) -> &'static str {
explicit
.unwrap_or_else(|| crate::AgencyCode::for_mp_id(mp_id))
.as_str()
}
mod interchange;
pub use interchange::{InterchangeBuilder, unb_qualifier};
#[cfg(feature = "utilmd")]
mod utilmd;
#[cfg(feature = "utilmd")]
pub use utilmd::{UtilmdBuilder, UtilmdTransactionBuilder};
#[cfg(feature = "mscons")]
mod mscons;
#[cfg(feature = "mscons")]
pub use mscons::{
MSCONS_UNITS, MeteringPointBuilder, MsconsBuilder, QTY_ENERGIE_SUMMIERT, QTY_ERSATZWERT,
QTY_WAHRER_WERT, is_valid_mscons_unit,
};
#[cfg(feature = "aperak")]
mod aperak;
#[cfg(feature = "aperak")]
pub use aperak::AperakBuilder;
#[cfg(feature = "contrl")]
mod contrl;
#[cfg(feature = "contrl")]
pub use contrl::ContrlBuilder;
#[cfg(feature = "iftsta")]
mod iftsta;
#[cfg(feature = "iftsta")]
pub use iftsta::IftstaBuilder;
#[cfg(feature = "insrpt")]
mod insrpt;
#[cfg(feature = "insrpt")]
pub use insrpt::InsrptBuilder;
#[cfg(feature = "invoic")]
mod invoic;
#[cfg(feature = "invoic")]
pub use invoic::InvoicBuilder;
#[cfg(feature = "orders")]
mod orders;
#[cfg(feature = "orders")]
pub use orders::OrdersBuilder;
#[cfg(feature = "partin")]
mod partin;
#[cfg(feature = "partin")]
pub use partin::PartinBuilder;
#[cfg(feature = "reqote")]
mod reqote;
#[cfg(feature = "reqote")]
pub use reqote::ReqoteBuilder;
#[cfg(feature = "remadv")]
mod remadv;
#[cfg(feature = "remadv")]
pub use remadv::{Abweichungsgrund, Positionsfehler, Rechnungsbezug, RemadvBuilder};
#[cfg(feature = "ordchg")]
mod ordchg;
#[cfg(feature = "ordchg")]
pub use ordchg::OrdchgBuilder;
#[cfg(feature = "ordrsp")]
mod ordrsp;
#[cfg(feature = "ordrsp")]
pub use ordrsp::OrdrespBuilder;
#[cfg(feature = "quotes")]
mod quotes;
#[cfg(feature = "quotes")]
pub use quotes::{DauerEinheit, QuotesBuilder};
#[cfg(feature = "comdis")]
mod comdis;
#[cfg(feature = "comdis")]
pub use comdis::ComdisBuilder;
#[cfg(feature = "pricat")]
mod pricat;
#[cfg(feature = "pricat")]
pub use pricat::{PricatBuilder, PricatLineItem, PricatPriceEntry, PricatPriceGroup};
#[cfg(feature = "utilts")]
mod utilts;
#[cfg(feature = "utilts")]
pub use utilts::{
UtiltsBuilder, UtiltsCalcStep, UtiltsDefinitionBlock, UtiltsEnergyAmountRef, UtiltsUsagePeriod,
UtiltsVorgang,
};