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);
27 }
28
29 pub fn register_many(&self, layouts: impl IntoIterator<Item = LayoutEncodingRef>) {
31 self.registry.register_many(layouts);
32 }
33
34 pub fn registry(&self) -> &LayoutRegistry {
36 &self.registry
37 }
38}
39
40impl Default for LayoutSession {
41 fn default() -> Self {
42 let layouts = LayoutRegistry::default();
43
44 layouts.register_many([
46 LayoutEncodingRef::new_ref(ChunkedLayoutEncoding.as_ref()),
47 LayoutEncodingRef::new_ref(FlatLayoutEncoding.as_ref()),
48 LayoutEncodingRef::new_ref(StructLayoutEncoding.as_ref()),
49 LayoutEncodingRef::new_ref(ZonedLayoutEncoding.as_ref()),
50 LayoutEncodingRef::new_ref(DictLayoutEncoding.as_ref()),
51 ]);
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 {}