vortex_layout/layouts/indexed/
session.rs1use std::any::Any;
7
8use vortex_session::ArcSwapMap;
9use vortex_session::SessionExt;
10use vortex_session::SessionGuard;
11use vortex_session::SessionVar;
12use vortex_session::registry::Id;
13
14use crate::layouts::indexed::index::IndexId;
15use crate::layouts::indexed::index::IndexVTableRef;
16
17type IndexRegistry = ArcSwapMap<Id, IndexVTableRef>;
19
20#[derive(Clone, Debug, Default)]
26pub struct IndexSession {
27 registry: IndexRegistry,
28}
29
30impl IndexSession {
31 pub fn register(&self, index: IndexVTableRef) {
33 self.registry.insert(index.id(), index);
34 }
35
36 pub fn find(&self, id: &IndexId) -> Option<IndexVTableRef> {
38 self.registry.get(id)
39 }
40
41 pub fn registry(&self) -> &IndexRegistry {
43 &self.registry
44 }
45}
46
47impl SessionVar for IndexSession {
48 fn as_any(&self) -> &dyn Any {
49 self
50 }
51
52 fn as_any_mut(&mut self) -> &mut dyn Any {
53 self
54 }
55}
56
57pub trait IndexSessionExt: SessionExt {
59 fn indexes(&self) -> SessionGuard<'_, IndexSession> {
61 self.get::<IndexSession>()
62 }
63}
64
65impl<S: SessionExt> IndexSessionExt for S {}