use super::{ValidationError, ValidationResult};
use crate::documents::activation::ActivationDocType;
use crate::parse::Document;
pub fn validate(doc: &Document, result: &mut ValidationResult) {
match doc {
Document::Activation(d) => {
match d.document_type.v {
ActivationDocType::RedispatchActivation | ActivationDocType::ActivationResponse => {
if d.time_series.is_empty() {
result.errors.push(ValidationError::Semantic(
"ACO/ACR ActivationDocument must contain at least one ActivationTimeSeries"
.to_string(),
));
}
}
ActivationDocType::TenderReduction => {}
}
}
Document::Kostenblatt(d) => {
if d.time_series.is_empty() {
result.errors.push(ValidationError::Semantic(
"Kostenblatt must contain at least one CostTimeSeries".to_string(),
));
}
}
Document::PlannedResourceSchedule(d) => {
if d.time_series.is_empty() {
result.errors.push(ValidationError::Semantic(
"PlannedResourceScheduleDocument must contain at least one PlannedResourceTimeSeries"
.to_string(),
));
}
}
Document::Stammdaten(d) => {
use crate::documents::stammdaten::Meldungsstatus;
if d.meldungsstatus != Meldungsstatus::Deactivation && d.sr_objekte.is_empty() {
result.errors.push(ValidationError::Semantic(
"Stammdaten (creation/update) must contain at least one SR_Objekt".to_string(),
));
}
}
Document::NetworkConstraint(d) => {
if d.doc_status.is_none() && d.time_series.is_empty() {
result.errors.push(ValidationError::Semantic(
"NetworkConstraintDocument must contain at least one NetworkConstraintTimeSeries \
(or carry a DocStatus withdrawal)"
.to_string(),
));
}
}
Document::Unavailability(d) => {
if d.doc_status.is_none() && d.time_series.is_empty() {
result.errors.push(ValidationError::Semantic(
"Unavailability_MarketDocument must contain at least one TimeSeries \
(or carry a docStatus withdrawal)"
.to_string(),
));
}
}
_ => {}
}
}