surql/lib.rs
1//! # surql
2//!
3//! Code-first database toolkit for SurrealDB in Rust.
4//!
5//! Rust port of [`oneiriq-surql`](https://github.com/Oneiriq/surql-py) (Python) and
6//! [`@oneiriq/surql`](https://github.com/Oneiriq/surql) (TypeScript).
7//! Target: 1:1 feature parity.
8//!
9//! ## Modules
10//!
11//! - [`error`]: [`SurqlError`] and [`Result`].
12//! - [`types`]: Type-safe wrappers ([`RecordID`](types::RecordID),
13//! [`RecordRef`](types::RecordRef), [`SurrealFn`](types::SurrealFn),
14//! operators, reserved-word checks, datetime coercion).
15//! - [`connection`]: Connection [`ConnectionConfig`](connection::ConnectionConfig)
16//! and credential types ([`RootCredentials`](connection::RootCredentials),
17//! [`NamespaceCredentials`](connection::NamespaceCredentials),
18//! [`DatabaseCredentials`](connection::DatabaseCredentials),
19//! [`ScopeCredentials`](connection::ScopeCredentials)).
20//! - [`schema`]: Schema definition layer —
21//! [`FieldDefinition`](schema::FieldDefinition),
22//! [`TableDefinition`](schema::TableDefinition),
23//! [`EdgeDefinition`](schema::EdgeDefinition), and
24//! [`AccessDefinition`](schema::AccessDefinition).
25//! - [`migration`]: Migration data model ([`Migration`](migration::Migration),
26//! [`MigrationHistory`](migration::MigrationHistory),
27//! [`MigrationPlan`](migration::MigrationPlan),
28//! [`MigrationState`](migration::MigrationState),
29//! [`MigrationDirection`](migration::MigrationDirection),
30//! [`SchemaDiff`](migration::SchemaDiff)) and filesystem-level discovery
31//! ([`discover_migrations`](migration::discover_migrations),
32//! [`load_migration`](migration::load_migration)).
33//!
34//! - [`orchestration`] *(feature-gated: `orchestration`)*: Multi-database
35//! migration orchestration — [`EnvironmentConfig`](orchestration::EnvironmentConfig),
36//! [`EnvironmentRegistry`](orchestration::EnvironmentRegistry),
37//! [`MigrationCoordinator`](orchestration::MigrationCoordinator),
38//! [`HealthCheck`](orchestration::HealthCheck), and deployment
39//! strategies ([`SequentialStrategy`](orchestration::SequentialStrategy),
40//! [`ParallelStrategy`](orchestration::ParallelStrategy),
41//! [`RollingStrategy`](orchestration::RollingStrategy),
42//! [`CanaryStrategy`](orchestration::CanaryStrategy)).
43
44#![warn(clippy::all)]
45#![warn(clippy::pedantic)]
46#![allow(clippy::module_name_repetitions)]
47#![allow(clippy::must_use_candidate)]
48#![allow(clippy::missing_errors_doc)]
49#![allow(clippy::missing_panics_doc)]
50#![allow(clippy::doc_markdown)]
51#![allow(clippy::uninlined_format_args)]
52#![allow(clippy::return_self_not_must_use)]
53#![deny(missing_docs)]
54#![forbid(unsafe_code)]
55
56#[cfg(feature = "cache")]
57pub mod cache;
58#[cfg(feature = "cli")]
59pub mod cli;
60pub mod connection;
61pub mod error;
62pub mod migration;
63#[cfg(feature = "orchestration")]
64pub mod orchestration;
65pub mod query;
66pub mod schema;
67#[cfg(feature = "settings")]
68pub mod settings;
69pub mod types;
70
71pub use error::{Result, SurqlError};
72
73#[cfg(any(feature = "client", feature = "client-rustls"))]
74pub use connection::DatabaseClient;
75
76// Convenience re-exports for the query-UX surface (sub-feature 1: first-class
77// `type::record` / `type::thing` helpers).
78pub use types::operators::{type_record, type_thing};
79
80// Result-extraction helpers hoisted into the crate root for ergonomic
81// `use surql::{extract_one, extract_scalar, extract_many, has_result};` usage
82// (sub-feature 3).
83pub use query::results::{extract_many, extract_one, extract_scalar, has_result};