///|
pub struct ValidationPolicy {
require_catalog_membership : Bool
} derive(Debug, Eq, ToJson)
///|
pub fn ValidationPolicy::permissive() -> ValidationPolicy {
{ require_catalog_membership: false }
}
///|
pub fn ValidationPolicy::strict() -> ValidationPolicy {
{ require_catalog_membership: true }
}
///|
pub fn validate_with_policy(
catalog : Catalog,
input : String,
policy : ValidationPolicy,
) -> ValidationReport {
let report = validate_against(catalog, input)
if policy.require_catalog_membership && report.status is Unknown {
{
input: report.input,
normalized: report.normalized,
status: Invalid,
chapter: report.chapter,
entry: report.entry,
issues: report.issues +
[
{
code: report.normalized.unwrap_or(report.input),
message: "catalog membership is required by this validation policy",
hint: "load an authorized catalog containing this code",
},
],
}
} else {
report
}
}