use super::conformance_level::SealConformanceLevel;
use super::envelope::SealEnvelope;
use super::format::SealFormat;
use super::mode::SealMode;
use super::request::SealRequest;
#[derive(Debug, Clone)]
pub struct SealCapabilities {
pub supported_formats: Vec<SealFormat>,
pub supported_modes: Vec<SealMode>,
pub supported_levels: Vec<SealConformanceLevel>,
pub supported_envelopes: Vec<SealEnvelope>,
}
impl SealCapabilities {
pub fn can_produce(&self, req: &SealRequest) -> bool {
self.supported_formats.contains(&req.sig_format)
&& self.supported_modes.contains(&req.mode)
&& self.supported_levels.contains(&req.conformance_level)
&& self.supported_envelopes.contains(&req.envelope)
&& req.sig_format.admits(req.envelope)
}
#[must_use]
pub fn can_outlive_certificate_expiry(&self) -> bool {
self.supported_levels
.iter()
.any(|l| l.survives_certificate_expiry())
}
}