1use vortex_session::Ref;
5use vortex_session::SessionExt;
6use vortex_session::registry::Registry;
7
8use crate::LayoutEncodingRef;
9use crate::layouts::chunked::ChunkedLayoutEncoding;
10use crate::layouts::dict::DictLayoutEncoding;
11use crate::layouts::flat::FlatLayoutEncoding;
12use crate::layouts::struct_::StructLayoutEncoding;
13use crate::layouts::zoned::ZonedLayoutEncoding;
14
15pub type LayoutRegistry = Registry<LayoutEncodingRef>;
16
17#[derive(Debug)]
19pub struct LayoutSession {
20 registry: LayoutRegistry,
21}
22
23impl LayoutSession {
24 pub fn register(&self, layout: LayoutEncodingRef) {
26 self.registry.register(layout.id(), layout);
27 }
28
29 pub fn register_many(&self, layouts: impl IntoIterator<Item = LayoutEncodingRef>) {
31 for layout in layouts {
32 self.registry.register(layout.id(), layout);
33 }
34 }
35
36 pub fn registry(&self) -> &LayoutRegistry {
38 &self.registry
39 }
40}
41
42impl Default for LayoutSession {
43 fn default() -> Self {
44 let layouts = LayoutRegistry::default();
45
46 layouts.register(ChunkedLayoutEncoding.id(), ChunkedLayoutEncoding.as_ref());
48 layouts.register(FlatLayoutEncoding.id(), FlatLayoutEncoding.as_ref());
49 layouts.register(StructLayoutEncoding.id(), StructLayoutEncoding.as_ref());
50 layouts.register(ZonedLayoutEncoding.id(), ZonedLayoutEncoding.as_ref());
51 layouts.register(DictLayoutEncoding.id(), DictLayoutEncoding.as_ref());
52
53 Self { registry: layouts }
54 }
55}
56
57pub trait LayoutSessionExt: SessionExt {
59 fn layouts(&self) -> Ref<'_, LayoutSession> {
61 self.get::<LayoutSession>()
62 }
63}
64impl<S: SessionExt> LayoutSessionExt for S {}