Skip to main content

fraiseql_core/schema/
mod.rs

1//! Compiled Schema Types
2//!
3//! This module defines the Rust-owned schema representation that is compiled
4//! from Python/TypeScript decorators at startup time.
5//!
6//! # Architecture
7//!
8//! ```text
9//! Python/TypeScript                    Rust
10//! ─────────────────                    ────
11//! @fraiseql.type    ─┐
12//! @fraiseql.query    ├─→ SchemaCompiler ─→ JSON ─→ CompiledSchema
13//! @fraiseql.mutation─┘                              (Rust-owned)
14//!                                                        │
15//!                                                        ▼
16//!                                              Axum serves requests
17//!                                              (Python/TS irrelevant)
18//! ```
19//!
20//! # Key Invariant
21//!
22//! After `CompiledSchema::from_json()`, all data is **Rust-owned**.
23//! No Python/TypeScript objects are referenced during request handling.
24//!
25//! # Usage
26//!
27//! ```ignore
28//! use fraiseql_core::schema::CompiledSchema;
29//!
30//! // From Python-compiled JSON
31//! let schema = CompiledSchema::from_json(json_str)?;
32//!
33//! // From CLI config file
34//! let schema = CompiledSchema::from_json(&std::fs::read_to_string("schema.json")?)?;
35//!
36//! // Access schema info
37//! println!("Types: {}", schema.types.len());
38//! println!("Queries: {}", schema.queries.len());
39//! ```
40
41mod compiled;
42mod config_types;
43mod dependency_graph;
44mod field_type;
45mod introspection;
46mod scalar_types;
47
48pub use compiled::{
49    ArgumentDefinition, AutoParams, CompiledSchema, DirectiveDefinition, DirectiveLocationKind,
50    EnumDefinition, EnumValueDefinition, FilterOperator, InputFieldDefinition,
51    InputObjectDefinition, InterfaceDefinition, MutationDefinition, MutationOperation,
52    ObserverDefinition, QueryDefinition, RetryConfig, RoleDefinition, SecurityConfig,
53    SqlProjectionHint, StaticFilterCondition, SubscriptionDefinition, SubscriptionFilter,
54    TypeDefinition, UnionDefinition,
55};
56pub use config_types::{
57    AuthorizationPolicy, AuthorizationRule, CircuitBreakerConfig, CompiledSecurityConfig,
58    EnterpriseSecurityConfig, EntityCircuitBreakerOverride, EventHandler, FederationConfig,
59    FederationEntity, FieldAuthRule, ObserversConfig,
60};
61pub use dependency_graph::{ChangeImpact, CyclePath, SchemaDependencyGraph};
62pub use field_type::{
63    DeprecationInfo, DistanceMetric, FieldDefinition, FieldEncryptionConfig, FieldType,
64    VectorConfig, VectorIndexType,
65};
66pub use introspection::{
67    DirectiveLocation, IntrospectionBuilder, IntrospectionDirective, IntrospectionEnumValue,
68    IntrospectionField, IntrospectionInputValue, IntrospectionResponses, IntrospectionSchema,
69    IntrospectionType, IntrospectionTypeRef, IntrospectionValidationRule, TypeKind,
70};
71pub use scalar_types::{BUILTIN_SCALARS, RICH_SCALARS, is_known_scalar};
72
73#[cfg(test)]
74mod tests;