///|
pub(all) enum Profile {
Traceability
Shipment
TradeItem
LogisticUnit
} derive(Debug, Eq)
///|
pub fn available_profiles() -> Array[Profile] {
[Traceability, Shipment, TradeItem, LogisticUnit]
}
///|
pub struct ProfileReport {
ok : Bool
missing : Array[String]
issues : Array[String]
} derive(Debug, Eq)
///|
pub fn validate_profile(
message : GS1Message,
profile : Profile,
) -> ProfileReport {
let missing : Array[String] = []
let issues : Array[String] = []
let required = match profile {
Traceability => ["01", "10", "17"]
Shipment => ["01", "10"]
TradeItem => ["01"]
LogisticUnit => ["00"]
}
for code in required {
if message.first_value(code) is None {
missing.push(code)
}
}
if profile is LogisticUnit && message.first_value("01") is Some(_) {
issues.push("logistic unit should not mix SSCC and GTIN requirements")
}
{ ok: missing.is_empty() && issues.is_empty(), missing, issues }
}