Skip to main content

panopticon_core/
lib.rs

1mod commands;
2mod dependencies;
3mod namespace;
4mod pipeline;
5mod spec;
6mod values;
7
8// Public API - external consumers use this via `panopticon_core::prelude::*`
9pub mod prelude {
10    // Built-in Commands
11    pub use crate::commands::aggregate::AggregateCommand;
12    pub use crate::commands::condition::ConditionCommand;
13    pub use crate::commands::file::FileCommand;
14    pub use crate::commands::sql::SqlCommand;
15    pub use crate::commands::template::TemplateCommand;
16
17    // Pipeline
18    pub use crate::pipeline::Pipeline;
19    pub use crate::pipeline::results::{ResultSettings, ResultStore};
20
21    // Namespace
22    pub use crate::namespace::{Namespace, NamespaceBuilder};
23
24    // Context
25    pub use crate::values::scalar::ObjectBuilder;
26    pub use crate::values::scalar::ScalarValue;
27    pub use crate::values::store_path::StorePath;
28    pub use crate::values::tabular::TabularValue;
29}
30
31// Extension API - used to add custom commands, etc.
32// Consumers building custom commands use `panopticon_core::extend::*`
33pub mod extend {
34    // Traits - implement these to create a custom command
35    pub use crate::pipeline::traits::{
36        Command, CommandFactory, Descriptor, Executable, FromAttributes,
37    };
38
39    // Spec types - declare your command's attributes and results
40    pub use crate::spec::{
41        DEFAULT_NAME_POLICY, FieldSpec, LiteralFieldRef, NamePolicy, ObjectFields, ReferenceKind,
42        TypeDef,
43        attribute::{AttributeSpec, Attributes},
44        builder::{AttributeSpecBuilder, CommandSpecBuilder, PendingAttribute},
45        result::{ResultKind, ResultSpec},
46    };
47
48    // Value types - used in trait signatures and command implementations
49    pub use crate::values::context::ExecutionContext;
50    pub use crate::values::helpers::{InsertBatch, to_scalar};
51    pub use crate::values::scalar::{ScalarAsExt, ScalarMapExt, ScalarType};
52
53    // Command helper type for LazyLock-time CommandSchemas
54    pub use crate::commands::CommandSchema;
55
56    // Re-exports from external crates needed to implement traits
57    pub use async_trait::async_trait;
58    pub type Result<T> = anyhow::Result<T>;
59    pub use std::sync::LazyLock;
60}
61
62// Internal imports - layers on prelude with crate-internal types and std-lib conveniences.
63// All internal modules use `use crate::imports::*` as their single import line.
64pub(crate) mod imports {
65    pub use crate::extend::*;
66    pub use crate::prelude::*;
67
68    // Internal value types (not part of public extend API)
69    pub(crate) use crate::values::helpers::{is_truthy, parse_scalar, scalar_type_of, to_scalar};
70    pub(crate) use crate::values::scalar::ScalarStore;
71    pub(crate) use crate::values::tabular::TabularStore;
72
73    // Namespace internals
74    pub(crate) use crate::namespace::{
75        ExecutionMode, IteratorType, NamespaceHandle, RESERVED_NAMESPACES,
76    };
77
78    // Spec internals
79    pub(crate) use crate::spec::command::CommandSpec;
80
81    // Pipeline result internals
82    pub(crate) use crate::pipeline::{
83        order::{ExecutionGroup, ExecutionPlan},
84        results::{CommandResults, ResultValue},
85    };
86
87    // Result and error handling (shadow extend::Result with identical definition + add Context)
88    pub type Result<T> = anyhow::Result<T>;
89    pub use anyhow::Context as _;
90
91    // Std library
92    pub use std::collections::{HashMap, HashSet, VecDeque};
93    pub use std::path::PathBuf;
94    pub use std::sync::Arc;
95    pub use tokio::sync::RwLock;
96}
97
98#[cfg(test)]
99pub(crate) mod test_utils {
100    pub fn init_tracing() {
101        let _ = tracing_subscriber::fmt()
102            .with_env_filter("debug")
103            .with_test_writer()
104            .try_init();
105    }
106}