use std::collections::HashMap;
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;
pub use super::template::{
template_context_from_specs, TemplateParameterKind, TemplateParameterSpecSerde,
TemplateParameterType, TemplateParameterValue,
};
#[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>,
pub template_parameters: Option<Arc<HashMap<String, TemplateParameterKind>>>,
}
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,
template_parameters: 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>>,
pub template_parameters: Option<Arc<HashMap<String, TemplateParameterKind>>>,
}
#[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,
}
}
}