use crate::csaf::types::csaf_datetime::CsafDateTime;
pub trait WithOptionalGroupIds {
fn get_group_ids(&self) -> Option<impl Iterator<Item = &str> + '_>;
}
pub trait WithOptionalProductIds {
fn get_product_ids(&self) -> Option<impl Iterator<Item = &str> + '_>;
}
macro_rules! impl_optional_ids {
($type:ty, WithOptionalGroupIds, ReturnsValues) => {
impl $crate::csaf_traits::WithOptionalGroupIds for $type {
fn get_group_ids(&self) -> Option<impl Iterator<Item = &str> + '_> {
self.group_ids
.as_ref()
.map(|items| items.iter().map(|x| x.as_str()))
}
}
};
($type:ty, WithOptionalGroupIds, ReturnsEmpty) => {
impl $crate::csaf_traits::WithOptionalGroupIds for $type {
fn get_group_ids(&self) -> Option<impl Iterator<Item = &str> + '_> {
None::<::std::iter::Empty<&str>>
}
}
};
($type:ty, WithOptionalProductIds, ReturnsValues) => {
impl $crate::csaf_traits::WithOptionalProductIds for $type {
fn get_product_ids(&self) -> Option<impl Iterator<Item = &str> + '_> {
self.product_ids
.as_ref()
.map(|items| items.iter().map(|x| x.as_str()))
}
}
};
($type:ty, WithOptionalProductIds, ReturnsEmpty) => {
impl $crate::csaf_traits::WithOptionalProductIds for $type {
fn get_product_ids(&self) -> Option<impl Iterator<Item = &str> + '_> {
None::<::std::iter::Empty<&str>>
}
}
};
}
pub trait WithDate {
fn get_date(&self) -> CsafDateTime;
}
macro_rules! impl_with_date {
($type:ty) => {
impl $crate::csaf_traits::WithDate for $type {
fn get_date(&self) -> $crate::csaf::types::csaf_datetime::CsafDateTime {
$crate::csaf::types::csaf_datetime::CsafDateTime::from(&self.date)
}
}
};
}
pub trait WithOptionalDate {
fn get_date(&self) -> Option<CsafDateTime>;
}
macro_rules! impl_with_optional_date {
($type:ty) => {
impl $crate::csaf_traits::WithOptionalDate for $type {
fn get_date(&self) -> Option<$crate::csaf::types::csaf_datetime::CsafDateTime> {
self.date
.as_ref()
.map($crate::csaf::types::csaf_datetime::CsafDateTime::from)
}
}
};
}
pub(crate) use impl_optional_ids;
pub(crate) use impl_with_date;
pub(crate) use impl_with_optional_date;