#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("EDIFACT parse error: {0}")]
Parse(#[from] edifact_rs::EdifactError),
#[error("DVGW message type {message_type:?} requires the disabled `{feature}` Cargo feature")]
FeatureNotEnabled {
message_type: String,
feature: String,
},
#[error("unknown DVGW message type (check UNH DE 0065 element 1 component 0)")]
UnknownMessageType {
raw_code: String,
},
#[error("no DVGW profile registered for message type {message_type:?} version {version:?}")]
ProfileNotFound {
message_type: String,
version: String,
},
#[error("required segment {0} is missing")]
MissingSegment(&'static str),
#[error("malformed segment {0}")]
MalformedSegment(&'static str),
}
pub(crate) fn sanitize_code(s: &str) -> String {
const MAX_LEN: usize = 16;
let truncated = if s.len() > MAX_LEN { &s[..MAX_LEN] } else { s };
truncated
.chars()
.map(|c| {
if c.is_ascii_alphanumeric() || c == '.' {
c
} else {
'?'
}
})
.collect()
}