use crate::error::{SchemaError, SchemaResult};
use crate::schema::model::{DefaultOpenContent, OpenContentMode};
use crate::SchemaSet;
fn validate_default_open_content(
schema_set: &SchemaSet,
default_oc: &DefaultOpenContent,
) -> SchemaResult<()> {
let location = default_oc
.source
.as_ref()
.and_then(|s| schema_set.source_maps.locate(s));
if default_oc.mode == OpenContentMode::None {
return Err(SchemaError::structural(
"cos-valid-default-oc",
"defaultOpenContent mode must be 'interleave' or 'suffix'",
location,
));
}
if default_oc.wildcard.is_none() {
return Err(SchemaError::structural(
"cos-valid-default-oc",
"defaultOpenContent requires a wildcard (xs:any) child element",
location,
));
}
Ok(())
}
pub fn validate_all_default_open_content(schema_set: &SchemaSet) -> SchemaResult<()> {
for doc in &schema_set.documents {
if let Some(ref default_oc) = doc.default_open_content {
validate_default_open_content(schema_set, default_oc)?;
}
}
Ok(())
}