use crate::validation::ValidationError;
pub trait TestValidator<Doc> {
fn validate(&self, doc: &Doc) -> Result<(), Vec<ValidationError>>;
}
macro_rules! impl_validator {
($validator:ident, $validate_fn:path) => {
$crate::test_validation::impl_validator!(csaf2_0, $validator, $validate_fn);
$crate::test_validation::impl_validator!(csaf2_1, $validator, $validate_fn);
};
(csaf2_0, $validator:ident, $validate_fn:path) => {
impl crate::test_validation::TestValidator<crate::schema::csaf2_0::schema::CommonSecurityAdvisoryFramework>
for crate::csaf2_0::testcases::$validator
{
fn validate(
&self,
doc: &crate::schema::csaf2_0::schema::CommonSecurityAdvisoryFramework,
) -> Result<(), Vec<crate::validation::ValidationError>> {
$validate_fn(doc)
}
}
};
(csaf2_1, $validator:ident, $validate_fn:path) => {
impl crate::test_validation::TestValidator<crate::schema::csaf2_1::schema::CommonSecurityAdvisoryFramework>
for crate::csaf2_1::testcases::$validator
{
fn validate(
&self,
doc: &crate::schema::csaf2_1::schema::CommonSecurityAdvisoryFramework,
) -> Result<(), Vec<crate::validation::ValidationError>> {
$validate_fn(doc)
}
}
};
}
pub(crate) use impl_validator;
macro_rules! impl_raw_json_validator {
($validator:ident, $validate_fn:path) => {
$crate::test_validation::impl_raw_json_validator!(csaf2_0, $validator, $validate_fn);
$crate::test_validation::impl_raw_json_validator!(csaf2_1, $validator, $validate_fn);
};
(csaf2_0, $validator:ident, $validate_fn:path) => {
impl
crate::test_validation::TestValidator<
crate::csaf::raw::RawDocument<crate::schema::csaf2_0::schema::CommonSecurityAdvisoryFramework>,
> for crate::csaf2_0::testcases::$validator
{
fn validate(
&self,
document: &crate::csaf::raw::RawDocument<
crate::schema::csaf2_0::schema::CommonSecurityAdvisoryFramework,
>,
) -> Result<(), Vec<crate::validation::ValidationError>> {
$validate_fn(document.get_json())
}
}
};
(csaf2_1, $validator:ident, $validate_fn:path) => {
impl
crate::test_validation::TestValidator<
crate::csaf::raw::RawDocument<crate::schema::csaf2_1::schema::CommonSecurityAdvisoryFramework>,
> for crate::csaf2_1::testcases::$validator
{
fn validate(
&self,
document: &crate::csaf::raw::RawDocument<
crate::schema::csaf2_1::schema::CommonSecurityAdvisoryFramework,
>,
) -> Result<(), Vec<crate::validation::ValidationError>> {
$validate_fn(document.get_json())
}
}
};
}
pub(crate) use impl_raw_json_validator;