use vortex_array::ArrayId;
use vortex_array::session::ArraySessionExt;
use vortex_edition::ComponentKind;
use vortex_edition::EditionSessionExt;
use vortex_session::VortexSession;
use vortex_utils::aliases::hash_set::HashSet;
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub(crate) struct AllowedIds {
pub(crate) registered: Option<HashSet<ArrayId>>,
pub(crate) editions: Option<HashSet<ArrayId>>,
pub(crate) excluded: HashSet<ArrayId>,
}
impl AllowedIds {
pub(crate) fn all() -> Self {
Self::default()
}
pub(crate) fn from_session(session: &VortexSession) -> Self {
let registered = session
.arrays()
.registry()
.read(|registry| registry.keys().copied().collect());
let editions = session
.enabled_component_ids(ComponentKind::Array)
.into_iter()
.collect();
Self {
registered: Some(registered),
editions: Some(editions),
excluded: HashSet::default(),
}
}
pub(crate) fn is_allowed(&self, id: &ArrayId) -> bool {
!self.excluded.contains(id)
&& self.registered.as_ref().is_none_or(|ids| ids.contains(id))
&& self.editions.as_ref().is_none_or(|ids| ids.contains(id))
}
}