#[cfg(any(feature = "kwt", feature = "image-trust"))]
use std::sync::Arc;
#[cfg(feature = "kwt")]
use crate::kwt_access::KwtAccessConfig;
#[cfg(feature = "kwt")]
use crate::kwt_replay::AetherRuntime;
#[cfg(feature = "filter")]
use crate::filter::FilterStore;
#[derive(Clone)]
pub struct AppState {
#[cfg(feature = "image-trust")]
pub image_trust_attestation: Option<Arc<str>>,
#[cfg(feature = "kwt")]
pub kwt_access: Option<Arc<KwtAccessConfig>>,
#[cfg(feature = "kwt")]
pub aether_runtime: Option<Arc<AetherRuntime>>,
#[cfg(feature = "filter")]
pub filter: FilterStore,
}
impl AppState {
#[must_use]
pub fn empty() -> Self {
Self {
#[cfg(feature = "image-trust")]
image_trust_attestation: None,
#[cfg(feature = "kwt")]
kwt_access: None,
#[cfg(feature = "kwt")]
aether_runtime: None,
#[cfg(feature = "filter")]
filter: FilterStore::default(),
}
}
#[cfg(feature = "filter")]
#[must_use]
pub fn with_filter(mut self, filter: FilterStore) -> Self {
self.filter = filter;
self
}
#[cfg(feature = "kwt")]
#[must_use]
pub fn with_kwt(mut self, kwt: KwtAccessConfig) -> Self {
self.kwt_access = Some(Arc::new(kwt));
self
}
#[must_use]
pub fn new(
#[cfg(feature = "image-trust")] image_trust_attestation: Option<Arc<str>>,
#[cfg(feature = "kwt")] kwt_access: Option<KwtAccessConfig>,
#[cfg(feature = "kwt")] aether_runtime: Option<Arc<AetherRuntime>>,
#[cfg(feature = "filter")] filter: FilterStore,
) -> Self {
Self {
#[cfg(feature = "image-trust")]
image_trust_attestation,
#[cfg(feature = "kwt")]
kwt_access: kwt_access.map(Arc::new),
#[cfg(feature = "kwt")]
aether_runtime,
#[cfg(feature = "filter")]
filter,
}
}
}