zen-engine 2.0.0

Business rules engine
Documentation
mod analysis;
mod cursor;
mod dependencies;
mod editor;
mod enhance;
pub(crate) mod function;
mod nl;
mod queries;
mod schema;
mod ts_type;

pub use analysis::{GraphAnalysis, GraphNodeAnalysis, GraphSignature};
pub use enhance::GraphTraceMap;
pub use function::{FunctionResolutionRequest, FunctionTypeResolver};
pub(crate) use schema::SchemaType;

use std::rc::Rc;
use std::sync::Arc;

use zen_expression::variable::VariableType;
use zen_types::decision::FunctionNodeContent;

pub(crate) fn function_source(content: &FunctionNodeContent) -> Arc<str> {
    match content {
        FunctionNodeContent::Version2(function) => function.source.clone(),
        FunctionNodeContent::Version1(source) => source.clone(),
    }
}

pub(crate) fn wrap_optional(resolved: VariableType) -> VariableType {
    if matches!(
        resolved,
        VariableType::Any | VariableType::Null | VariableType::Nullable(_)
    ) {
        resolved
    } else {
        VariableType::Nullable(Rc::new(resolved))
    }
}