wrap_manifest_schemas/
validate.rs1use crate::{get_schemas::get_schemas, versions::AnyManifest};
2use jsonschema::{JSONSchema, ValidationError};
3
4pub fn validate_wrap_manifest(
5 manifest: &AnyManifest,
6 ext_schema: Option<JSONSchema>,
7) -> Result<(), super::error::Error> {
8 let schemas = get_schemas()?;
9
10 let panic_if_errors = |result: Result<
11 (),
12 Box<dyn Iterator<Item = ValidationError> + Send + Sync>,
13 >| match result {
14 Ok(_) => (),
15 Err(e) => panic!(
16 "Validation errors encountered while sanitizing WrapManifest format {}{}",
17 manifest.version(),
18 e.into_iter()
19 .map(|e| e.to_string())
20 .collect::<Vec<String>>()
21 .join("\n")
22 ),
23 };
24
25 let manifest_schema = JSONSchema::options()
26 .with_draft(jsonschema::Draft::Draft7)
27 .compile(&schemas[manifest.version().as_str()])?;
28 let manifest_json = manifest.to_json_value()?;
29 panic_if_errors(manifest_schema.validate(&manifest_json));
30
31 if let Some(ext_schema) = ext_schema {
32 panic_if_errors(ext_schema.validate(&manifest.to_json_value()?));
33 }
34
35 Ok(())
36}