macro_rules! skip_if_document_status_is_not {
($status:expr, $($variant:ident),+ $(,)?) => {
if !matches!(
$status,
$(crate::schema::csaf2_1::schema::DocumentStatus::$variant)|+
) {
return Ok(());
}
};
}
pub(crate) use skip_if_document_status_is_not;
#[cfg(test)]
mod tests {
use crate::schema::csaf2_1::schema::DocumentStatus;
fn run_skip_if_is_not_interim_or_final(status: DocumentStatus) -> Result<(), ()> {
skip_if_document_status_is_not!(status, Interim, Final);
Err(()) }
fn run_skip_if_is_not_draft(status: DocumentStatus) -> Result<(), ()> {
skip_if_document_status_is_not!(status, Draft);
Err(()) }
#[test]
fn test_doc_status_final() {
assert_eq!(run_skip_if_is_not_interim_or_final(DocumentStatus::Final), Err(()));
assert_eq!(run_skip_if_is_not_draft(DocumentStatus::Final), Ok(()));
}
#[test]
fn test_doc_status_interim() {
assert_eq!(run_skip_if_is_not_interim_or_final(DocumentStatus::Interim), Err(()));
assert_eq!(run_skip_if_is_not_draft(DocumentStatus::Interim), Ok(()));
}
#[test]
fn test_doc_status_draft() {
assert_eq!(run_skip_if_is_not_interim_or_final(DocumentStatus::Draft), Ok(()));
assert_eq!(run_skip_if_is_not_draft(DocumentStatus::Draft), Err(()));
}
}