Skip to main content

fraiseql_core/schema/
mod.rs

1//! Compiled Schema Types
2//!
3//! This module defines the Rust-owned schema representation loaded from a compiled
4//! schema at startup time.
5//!
6//! # Architecture
7//!
8//! ```text
9//! Authoring language                   Rust
10//! (Python, TS, Go, …)                 ────
11//! @fraiseql.type    ─┐
12//! @fraiseql.query    ├─→ schema.json ─→ fraiseql-cli compile ─→ CompiledSchema
13//! @fraiseql.mutation─┘                                           (Rust-owned)
14//!                                                                      │
15//!                                                                      ▼
16//!                                                            Axum serves requests
17//!                                                    (authoring language not involved)
18//! ```
19//!
20//! # Key Invariant
21//!
22//! After `CompiledSchema::from_json()`, all data is **Rust-owned**.
23//! No authoring-language objects are referenced during request handling.
24//!
25//! # Usage
26//!
27//! ```no_run
28//! // Requires: a compiled schema JSON file from `fraiseql-cli compile`.
29//! use fraiseql_core::schema::CompiledSchema;
30//! # fn example() -> Result<(), Box<dyn std::error::Error>> {
31//! # let json_str = r#"{"types":[],"queries":[]}"#;
32//! // From schema.compiled.json produced by `fraiseql-cli compile`
33//! let schema = CompiledSchema::from_json(json_str, false)?;
34//!
35//! // From CLI config file
36//! let schema = CompiledSchema::from_json(&std::fs::read_to_string("schema.json")?, false)?;
37//!
38//! // Access schema info
39//! println!("Types: {}", schema.types.len());
40//! println!("Queries: {}", schema.queries.len());
41//! # Ok(())
42//! # }
43//! ```
44
45mod compiled;
46mod config_types;
47mod dependency_graph;
48pub mod domain_types;
49mod field_type;
50mod graphql_type_defs;
51pub mod graphql_value;
52mod hierarchy;
53mod introspection;
54pub mod introspection_types;
55mod observer_types;
56mod scalar_types;
57pub mod security_config;
58mod subscription_types;
59
60pub use compiled::{
61    ArgumentDefinition, AutoParams, CURRENT_SCHEMA_FORMAT_VERSION, CompiledSchema, CursorType,
62    DirectiveDefinition, DirectiveLocationKind, MutationDefinition, MutationOperation,
63    QueryDefinition, canonicalize_json, is_safe_sql_identifier,
64};
65pub use config_types::{
66    AuthorizationPolicy, AuthorizationRule, Cardinality, CircuitBreakerConfig,
67    CompiledSecurityConfig, CrudNamingConfig, CrudNamingPreset, DebugConfig, DeleteResponse,
68    EnterpriseSecurityConfig, EntityCircuitBreakerOverride, EventHandler, FederationConfig,
69    FederationEntity, FieldAuthRule, GrpcConfig, McpConfig, NamingConvention, ObserversConfig,
70    Relationship, RestConfig, SessionVariableMapping, SessionVariableSource,
71    SessionVariablesConfig, SubscriptionHooksConfig, SubscriptionsConfig, ValidationConfig,
72};
73pub use dependency_graph::{ChangeImpact, CyclePath, SchemaDependencyGraph};
74pub use field_type::{
75    DeprecationInfo, DistanceMetric, FieldDefinition, FieldDenyPolicy, FieldEncryptionConfig,
76    FieldType, VectorConfig, VectorIndexType,
77};
78pub use graphql_type_defs::{
79    EnumDefinition, EnumValueDefinition, InputFieldDefinition, InputObjectDefinition,
80    InterfaceDefinition, SqlProjectionHint, TypeDefinition, UnionDefinition,
81};
82pub use graphql_value::GraphQLValue;
83pub use hierarchy::{HierarchiesConfig, HierarchyDefinition};
84pub use introspection::{
85    DirectiveLocation, IntrospectionBuilder, IntrospectionDirective, IntrospectionEnumValue,
86    IntrospectionField, IntrospectionInputValue, IntrospectionResponses, IntrospectionSchema,
87    IntrospectionType, IntrospectionTypeRef, IntrospectionValidationRule, TypeKind,
88};
89pub use observer_types::{ObserverDefinition, RetryConfig};
90pub use scalar_types::{BUILTIN_SCALARS, RICH_SCALARS, is_known_scalar};
91pub use security_config::{
92    InjectedParamSource, RoleDefinition, SecurityConfig, TenancyConfig, TenancyMode,
93};
94pub use subscription_types::{
95    FilterOperator, StaticFilterCondition, SubscriptionDefinition, SubscriptionFilter,
96};
97
98#[cfg(test)]
99mod tests;