use std::sync::Arc;
use crate::func::def::FunctionTranslationContext;
use crate::func::registry::FunctionRegistry;
use crate::interner::Interner;
use crate::provider::{EnvironmentProvider, NoOpProvider};
use crate::tree::ast::expression::Expression;
use crate::tree::ast::identifier::Identifier;
use crate::tree::typed_ast::environment::TypeEnvironment;
#[derive(bon::Builder, Default)]
pub struct ParseOptions {
pub interner: Option<Arc<Interner>>,
}
#[derive(bon::Builder, Clone)]
pub struct TypeCheckOptions {
#[builder(default = Arc::new(FunctionRegistry::default()))]
pub registry: Arc<FunctionRegistry>,
#[builder(default = Arc::new(NoOpProvider::default()) as Arc<dyn EnvironmentProvider>)]
pub provider: Arc<dyn EnvironmentProvider>,
pub interner: Option<Arc<Interner>>,
pub time_range: Option<Arc<Expression>>,
pub timestamp_field: Option<Identifier>,
pub message_field: Option<Identifier>,
}
impl Default for TypeCheckOptions {
fn default() -> Self {
Self {
registry: Arc::new(FunctionRegistry::default()),
provider: Arc::new(NoOpProvider::default()),
interner: None,
time_range: None,
timestamp_field: None,
message_field: None,
}
}
}
#[derive(bon::Builder, Default)]
pub struct ExpressionTypeCheckOptions {
#[builder(default = Arc::new(FunctionRegistry::default()))]
pub registry: Arc<FunctionRegistry>,
#[builder(default)]
pub bindings: Arc<TypeEnvironment>,
#[builder(default)]
pub fctx: FunctionTranslationContext,
pub interner: Option<Arc<Interner>>,
}
#[derive(bon::Builder)]
pub struct TranslateOptions {
#[builder(default = Arc::new(FunctionRegistry::default()))]
pub registry: Arc<FunctionRegistry>,
#[builder(default = Arc::new(NoOpProvider::default()) as Arc<dyn EnvironmentProvider>)]
pub provider: Arc<dyn EnvironmentProvider>,
pub timestamp_field: Option<Identifier>,
pub message_field: Option<Identifier>,
}
impl Default for TranslateOptions {
fn default() -> Self {
Self {
registry: Arc::new(FunctionRegistry::default()),
provider: Arc::new(NoOpProvider::default()),
timestamp_field: None,
message_field: None,
}
}
}