micromegas_analytics/lakehouse/session_configurator.rs
1use anyhow::Result;
2use datafusion::execution::context::SessionContext;
3
4/// Trait for configuring a SessionContext with additional tables and settings
5///
6/// This trait allows users to extend the default session context with custom tables,
7/// configuration, or other DataFusion resources. Implementations can register JSON files,
8/// CSV files, in-memory tables, or any DataFusion TableProvider.
9///
10/// # Example
11///
12/// ```rust,no_run
13/// use anyhow::Result;
14/// use datafusion::execution::context::SessionContext;
15/// use micromegas_analytics::lakehouse::session_configurator::SessionConfigurator;
16///
17/// #[derive(Debug)]
18/// struct MyConfigurator;
19///
20/// #[async_trait::async_trait]
21/// impl SessionConfigurator for MyConfigurator {
22/// async fn configure(&self, ctx: &SessionContext) -> Result<()> {
23/// // Register custom tables or configure session settings
24/// Ok(())
25/// }
26/// }
27/// ```
28#[async_trait::async_trait]
29pub trait SessionConfigurator: Send + Sync + std::fmt::Debug {
30 /// Configure the given SessionContext (e.g., register custom tables)
31 ///
32 /// # Arguments
33 ///
34 /// * `ctx` - The SessionContext to configure
35 ///
36 /// # Returns
37 ///
38 /// Returns `Ok(())` if configuration succeeds, or an error if something goes wrong.
39 async fn configure(&self, ctx: &SessionContext) -> Result<()>;
40}
41
42/// Default no-op implementation of SessionConfigurator
43///
44/// This implementation does nothing and is provided as a convenient default
45/// when no custom session configuration is needed.
46#[derive(Debug, Clone, Default)]
47pub struct NoOpSessionConfigurator;
48
49#[async_trait::async_trait]
50impl SessionConfigurator for NoOpSessionConfigurator {
51 async fn configure(&self, _ctx: &SessionContext) -> Result<()> {
52 Ok(())
53 }
54}