csaf-rs 0.5.1

A parser for the CSAF standard written in Rust
use crate::csaf::traits::util::not_present_20::NotPresentInCsaf20;
use crate::csaf::types::csaf_datetime::CsafDateTime;
use crate::csaf_traits::{WithDate, WithOptionalGroupIds, WithOptionalProductIds};
use crate::schema::csaf2_1::schema::FirstKnownExploitationDate as FirstKnownExploitationDate21;

pub trait FirstKnownExploitationDatesTrait: WithDate + WithOptionalProductIds + WithOptionalGroupIds {
    fn get_exploitation_date(&self) -> CsafDateTime;
}

impl FirstKnownExploitationDatesTrait for NotPresentInCsaf20 {
    fn get_exploitation_date(&self) -> CsafDateTime {
        self.into_any()
    }
}

// CSAF 2.1 implementation
impl FirstKnownExploitationDatesTrait for FirstKnownExploitationDate21 {
    fn get_exploitation_date(&self) -> CsafDateTime {
        CsafDateTime::from(&self.exploitation_date)
    }
}

crate::csaf::traits::impl_optional_ids!(FirstKnownExploitationDate21, WithOptionalProductIds, ReturnsValues);
crate::csaf::traits::impl_with_date!(FirstKnownExploitationDate21);
crate::csaf::traits::impl_optional_ids!(FirstKnownExploitationDate21, WithOptionalGroupIds, ReturnsValues);