Skip to main content

valence_core/
lib.rs

1//! Valence core ports: storage routing, host-injectable traits, and runtime builder.
2//!
3//! **Audience:** adapter authors, host integrators, and generated model code.
4//!
5//! ## Stack position
6//!
7//! ```text
8//! valence facade → valence-core (this crate) → valence-telemetry
9//! backends (mem, surreal, third-party) implement [`DatabaseBackend`]
10//! ```
11//!
12//! ## Entry points
13//!
14//! - [`Valence`] / [`ValenceBuilder`] — boot and wire backends
15//! - [`DatabaseBackend`] — storage adapter trait (open `engine_id`)
16//! - [`DatabaseRouter`] — heterogeneous engine registry
17//! - [`ports`] — secrets, actor, endpoints (host-injectable)
18//! - [`Model`] — generated CRUD surface
19//!
20//! ## Examples
21//!
22//! ```
23//! use std::sync::Arc;
24//! use valence_backend_mem::InMemoryBackend;
25//! use valence_core::Valence;
26//!
27//! let valence = Valence::builder()
28//!     .add_backend("default", Arc::new(InMemoryBackend::new()))
29//!     .build()
30//!     .expect("build");
31//! assert!(valence.active_backend().is_ok());
32//! ```
33//!
34//! ## Gotchas
35//!
36//! - Engine SDKs and product host crates must never appear in this crate
37//!   (use `valence-backend-*` and separate host adapters)
38//! - Host-owned codegen lives in `valence-codegen`, not here
39
40extern crate self as valence_core;
41
42pub mod actor;
43pub mod admin_entity_delete;
44pub mod backend;
45pub mod batch;
46pub mod compiled_query;
47pub mod compiled_query_factory;
48pub mod connection;
49pub mod database_retry;
50pub mod deletion;
51pub mod entity;
52pub mod error;
53pub mod evaluator;
54pub mod iter;
55pub mod known_engines;
56pub mod model;
57pub mod owner_ref;
58pub mod ownership;
59pub mod ports;
60pub mod privacy;
61pub mod privacy_policies;
62pub mod query;
63pub mod query_compiler;
64pub mod query_compiler_registry;
65pub mod read_cache;
66pub mod record_id;
67pub mod reference;
68pub mod registry;
69pub mod router;
70pub mod router_key;
71pub mod row_json;
72pub mod runtime;
73pub mod schema;
74pub mod schema_api;
75pub mod schema_types;
76pub mod side_effect;
77pub mod trait_registry;
78pub mod trait_schema;
79pub mod ttl;
80pub mod validation;
81
82#[cfg(feature = "instrumentation")]
83pub mod instrumentation;
84
85/// Hidden re-exports for generated model code and platform migrations.
86#[doc(hidden)]
87pub mod __internal {
88    pub use crate::compiled_query::CompiledQuery;
89    pub use crate::query_compiler::QueryCompiler;
90}
91
92pub use actor::Actor;
93pub use admin_entity_delete::queue_delete_entity;
94#[cfg(feature = "compiler-indradb")]
95pub use backend::IndraQueryCompiler;
96#[cfg(feature = "compiler-mongodb")]
97pub use backend::MongoQueryCompiler;
98#[cfg(feature = "compiler-redis")]
99pub use backend::RedisQueryCompiler;
100#[cfg(feature = "compiler-sql")]
101pub use backend::SqlQueryCompiler;
102#[cfg(feature = "compiler-surreal")]
103pub use backend::SurrealQueryCompiler;
104pub use backend::{BackendCapabilities, DatabaseBackend};
105pub use batch::BatchCreatable;
106pub use compiled_query::CompiledQuery;
107pub use connection::{
108    extract_id_from_record, extract_id_from_record_display, extract_id_from_select_value,
109    id_from_model, Cardinality, IdHolder, OnDelete,
110};
111pub use database_retry::retry_on_database_tx_conflict;
112pub use deletion::{
113    dispatch, is_deletion_dispatcher_registered, register_deletion_dispatcher,
114    register_noop_deletion_dispatcher_for_tests, DeletionRequest, DeletionService,
115};
116pub use entity::ValenceEntity;
117pub use error::{Error, Result};
118pub use evaluator::{
119    Database, DatabaseEvaluator, DatabaseFromEngine, ResolverContext, DEFAULT_IN_MEMORY,
120    DEFAULT_IN_MEMORY_ROUTER_KEY,
121};
122pub use iter::{IterDescriptor, IterEvaluation, IterExecuteFn, IterShouldRunFn};
123pub use known_engines::KnownEngines;
124pub use model::{FieldOperation, Model, PrivacyError, SchemaMetadata};
125pub use owner_ref::{OwnerKind, OwnerRef, OwnershipConfig};
126pub use ownership::OwnershipService;
127pub use ports::actor::{ActorContext, ActorFactory, JsonActorContext, JsonActorFactory};
128pub use ports::endpoints::{
129    DatabaseEndpointResolver, EnvEndpointResolver, NoopEndpointResolver, StaticEndpointResolver,
130};
131pub use ports::secrets::{EnvSecretProvider, NoOpSecretProvider, SecretProvider};
132pub use privacy::{PolicyEvaluator, PrivacyEvaluator, PrivacyOperation};
133pub use query::{
134    DateTimePredicate, HopSource, HopType, IntPredicate, NullPredicate, QueryCore, RecordPredicate,
135    SortDirection, StringPredicate,
136};
137pub use query_compiler::QueryCompiler;
138pub use query_compiler_registry::{
139    compile_for_engine, global_compiler_registry, QueryCompilerRegistry,
140};
141pub use read_cache::{
142    get_record_via_cache, get_record_with_ownership_bundle_via_cache, invalidate,
143    read_cache_enabled,
144};
145pub use record_id::RecordId;
146pub use reference::{Reference, ReferencedEntity, WithReference};
147pub use router::DatabaseRouter;
148pub use router_key::router_key;
149pub use runtime::{
150    RouterValenceFactory, RouterValenceFactoryConfig, Valence, ValenceBuilder, ValenceFactory,
151};
152pub use schema::{
153    schema_connections_for_table, SchemaConnectionsOverlayInit, SchemaMetadataInit,
154    SchemaMetadataStruct, SchemaRegistry,
155};
156pub use schema_api::{
157    ForeignKeyRef, Schema, SchemaConnection, SchemaEdge, SchemaField, SchemaMeta, SchemaPolicies,
158    SchemaPolicyRule, SchemaPolicyRules, SchemaPrivacy,
159};
160pub use schema_types::{FieldType, Role, Validator};
161pub use side_effect::{FieldChange, Mutation, MutationKind, SideEffect};
162pub use trait_registry::TraitRegistry;
163pub use trait_schema::{
164    TraitDefinition, TraitDefinitionInit, TraitFieldDef, TraitImplementor, TraitPolicies,
165    TraitPolicyRules,
166};
167pub use ttl::{BackendTtlCapability, SchemaTtlPolicy};
168pub use valence_telemetry::{ConsoleSink, NoOpSink, TelemetrySink};
169
170#[cfg(feature = "instrumentation")]
171pub use instrumentation::{wrap_backend, InstrumentedBackend, MutationTimer};
172
173pub use inventory;