use std::collections::HashMap;
use std::sync::Arc;
use crate::err::TranslationError;
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, SimpleIdentifier};
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>>>,
pub default_space: Option<crate::tree::ast::identifier::SimpleIdentifier>,
}
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,
default_space: 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>,
pub default_space: Option<SimpleIdentifier>,
pub time_range: Option<Arc<Expression>>,
}
impl Default for TranslateOptions {
fn default() -> Self {
Self {
registry: Arc::new(FunctionRegistry::default()),
provider: Arc::new(NoOpProvider::default()),
timestamp_field: None,
message_field: None,
default_space: None,
time_range: None,
}
}
}
pub fn parse_default_space(
default_space: Option<&str>,
) -> Result<Option<SimpleIdentifier>, TranslationError> {
default_space.map(SimpleIdentifier::parse).transpose()
}