zen-engine 2.0.1

Business rules engine
Documentation
use std::sync::Arc;

pub(crate) const MAX_RECURSION_DEPTH: usize = 32;

pub(crate) mod blocks;
pub(crate) mod evaluator;
pub(crate) mod ir;
pub(crate) mod linter;
pub(crate) mod queries;
pub(crate) mod raw;
pub(crate) mod refs;
pub(crate) mod runtime;
pub(crate) mod validator;

pub use crate::workspace::{
    BlockExecution, BlockRef, BlockTrace, Completion, ConditionTrace, ConditionalSchema, Cursor,
    CursorTarget, DecisionTableExtras, DependencyNode, Diagnostic, DiagnosticCode,
    DiagnosticLocation, Dictionary, DictionaryEntryInfo, DiscriminantVariant, DiscriminatedUnion,
    EngineEdit, Entity, EntityField, EvaluateRequest, EvaluationError, EvaluationResult,
    ExpressionKind, FieldOrigin, FunctionResolutionRequest, FunctionTypeResolver, GraphAnalysis,
    GraphNodeAnalysis, GraphSignature, GraphTraceMap, GuardedProperty, InputProperty,
    InputValidationError, InspectResult, NlExpression, OutputProperty, PrepareRename, PropertyKind,
    ReferenceKind, ReferenceSite, RenameTarget, SchemaFieldKind, SchemaGroup, ScopeRequest,
    Severity, Span, Trace, Workspace, WriteConflict, WriteTrace,
};
pub use raw::{BlockDoc, PolicyDocument};

pub type PolicyWorkspace = Workspace;

pub(crate) trait ArcStrTrim {
    fn trimmed(&self) -> Self;
}

impl ArcStrTrim for Arc<str> {
    fn trimmed(&self) -> Self {
        let trimmed = self.trim();
        if trimmed.len() == self.len() {
            self.clone()
        } else {
            Arc::from(trimmed)
        }
    }
}