#![deny(unsafe_code)]
#![deny(clippy::undocumented_unsafe_blocks)]
#![deny(missing_docs)]
#![warn(clippy::pedantic)]
#![allow(clippy::module_name_repetitions)]
#![allow(clippy::result_large_err)]
#![allow(clippy::must_use_candidate)]
#![allow(clippy::return_self_not_must_use)]
mod agency_code;
mod any_message;
mod custom_rule_pack;
mod error;
mod interchange;
mod light_message;
mod lokationstyp;
mod message;
mod message_type;
mod parse;
mod pid_scan;
mod platform;
mod pruefidentifikator;
mod release;
mod report;
pub mod builders;
pub mod messages;
pub mod profile;
pub mod registry;
pub mod utilmd_codes;
include!(concat!(env!("OUT_DIR"), "/profiles.rs"));
pub use agency_code::AgencyCode;
pub use any_message::AnyMessage;
pub use custom_rule_pack::CustomRulePack;
pub use error::{Error, ProfileError};
pub use interchange::{InterchangeHeader, MessageEnvelope, ParsedInterchange, ReceiptContext};
pub use light_message::LightMessage;
pub use lokationstyp::Lokationstyp;
pub use message::EdiEnergyMessage;
pub use message_type::MessageType;
pub use parse::{
DEFAULT_MAX_SEGMENT_BYTES, InterchangeIter, ParseConfig, Parser, parse, parse_envelope_only,
parse_interchange,
};
pub use platform::Platform;
pub use profile::{Profile, Pruefschablone};
pub use pruefidentifikator::{Pruefidentifikator, ablehnung_pid, answer_pids, bestaetigung_pid};
pub use registry::{
DEFAULT_RECEIVE_TOLERANCE_DAYS, ProcessContext, ReleaseRegistry, TransitionState,
};
pub use release::{Release, ReleaseKind, ReleaseTrack};
pub use report::{EdiEnergyReport, RuleOrigin};
pub use edifact_rs::{
EdifactDeserialize, EdifactSerialize, ReaderConfig, ValidationIssue, ValidationReport,
ValidationSeverity,
};
pub use report::ValidationIssueSummary;
#[cfg(feature = "aperak")]
pub use messages::aperak::AperakError;
#[cfg(feature = "contrl")]
pub use messages::contrl::{ContrlElementError, ContrlMessageResponse, ContrlSegmentError};
#[cfg(feature = "mscons")]
pub use messages::mscons::{
MsconsDeliveryPoint, MsconsLineItem, MsconsQuantity, MsconsReference, MsconsTimeSeries,
};
#[cfg(feature = "utilmd")]
pub use messages::utilmd::{UtilmdReference, UtilmdTransaction};
#[must_use = "validation result must be checked for errors"]
pub fn validate_and_check_pid(
msg: &impl EdiEnergyMessage,
expected: Pruefidentifikator,
) -> Result<EdiEnergyReport, Error> {
let report = msg.validate()?;
match msg.detect_pruefidentifikator() {
Ok(actual) if actual == expected => Ok(report),
Ok(actual) => {
let mut inner = report.into_inner();
inner.add_error(
edifact_rs::ValidationIssue::new(
edifact_rs::ValidationSeverity::Error,
format!("expected Pruefidentifikator {expected}, found {actual}"),
)
.with_rule_id("EE-PID-001")
.with_segment("BGM"),
);
Ok(EdiEnergyReport::new(inner))
}
Err(_) => {
let mut inner = report.into_inner();
inner.add_error(
edifact_rs::ValidationIssue::new(
edifact_rs::ValidationSeverity::Error,
format!("expected Pruefidentifikator {expected}, but none was found"),
)
.with_rule_id("EE-PID-001")
.with_segment("BGM"),
);
Ok(EdiEnergyReport::new(inner))
}
}
}