1use std::sync::Arc;
2
3pub(crate) const MAX_RECURSION_DEPTH: usize = 32;
4
5pub(crate) mod blocks;
6pub(crate) mod evaluator;
7pub(crate) mod ir;
8pub(crate) mod linter;
9pub(crate) mod queries;
10pub(crate) mod raw;
11pub(crate) mod refs;
12pub(crate) mod runtime;
13pub(crate) mod validator;
14
15pub use crate::workspace::{
16 BlockExecution, BlockRef, BlockTrace, Completion, ConditionTrace, ConditionalSchema, Cursor,
17 CursorTarget, DecisionTableExtras, DependencyNode, Diagnostic, DiagnosticCode,
18 DiagnosticLocation, Dictionary, DictionaryEntryInfo, DiscriminantVariant, DiscriminatedUnion,
19 EngineEdit, Entity, EntityField, EvaluateRequest, EvaluationError, EvaluationResult,
20 ExpressionKind, FieldOrigin, FunctionResolutionRequest, FunctionTypeResolver, GraphAnalysis,
21 GraphNodeAnalysis, GraphSignature, GraphTraceMap, GuardedProperty, InputProperty,
22 InputValidationError, InspectResult, NlExpression, OutputProperty, PrepareRename, PropertyKind,
23 ReferenceKind, ReferenceSite, RenameTarget, SchemaFieldKind, SchemaGroup, ScopeRequest,
24 Severity, Span, Trace, Workspace, WriteConflict, WriteTrace,
25};
26pub use raw::{BlockDoc, PolicyDocument};
27
28pub type PolicyWorkspace = Workspace;
29
30pub(crate) trait ArcStrTrim {
31 fn trimmed(&self) -> Self;
32}
33
34impl ArcStrTrim for Arc<str> {
35 fn trimmed(&self) -> Self {
36 let trimmed = self.trim();
37 if trimmed.len() == self.len() {
38 self.clone()
39 } else {
40 Arc::from(trimmed)
41 }
42 }
43}