allframe_core/
lib.rs

1//! # AllFrame Core
2//!
3//! The composable Rust API framework.
4//!
5//! AllFrame is the first Rust web framework designed, built, and evolved
6//! exclusively through Test-Driven Development (TDD).
7//!
8//! ## Quick Start
9//!
10//! ```rust,no_run
11//! use allframe_core::prelude::*;
12//!
13//! #[tokio::main]
14//! async fn main() {
15//!     println!("AllFrame - One frame. Infinite transformations.");
16//! }
17//! ```
18
19#![deny(warnings)]
20#![deny(missing_docs)]
21#![deny(unsafe_code)]
22
23/// Clean Architecture enforcement
24#[cfg(feature = "di")]
25pub mod arch;
26
27/// CQRS + Event Sourcing
28#[cfg(feature = "cqrs")]
29pub mod cqrs;
30
31/// OpenTelemetry automatic instrumentation
32#[cfg(feature = "otel")]
33pub mod otel;
34
35/// Cache abstraction
36pub mod cache;
37
38/// Dependency injection infrastructure
39#[cfg(feature = "di")]
40pub mod di;
41
42/// Health check infrastructure
43#[cfg(feature = "health")]
44pub mod health;
45
46/// Router module for protocol-agnostic request handling
47pub mod router;
48
49/// Graceful shutdown utilities
50pub mod shutdown;
51
52/// Resilience patterns (retry, circuit breaker, rate limiting)
53#[cfg(feature = "resilience")]
54pub mod resilience;
55
56/// Security utilities (obfuscation, safe logging)
57#[cfg(feature = "security")]
58pub mod security;
59
60/// gRPC server infrastructure
61#[cfg(feature = "router-grpc")]
62pub mod grpc;
63
64// ============================================================================
65// Re-exported dependencies
66// ============================================================================
67// These re-exports allow consumers to use common dependencies without adding
68// them explicitly to their Cargo.toml. This ensures version consistency and
69// reduces boilerplate in downstream crates.
70
71// ============================================================================
72// Re-exported macros
73// ============================================================================
74/// Re-export circuit_breaker attribute macro
75#[cfg(feature = "resilience")]
76pub use allframe_macros::circuit_breaker;
77/// Re-export rate_limited attribute macro
78#[cfg(feature = "resilience")]
79pub use allframe_macros::rate_limited;
80/// Re-export retry attribute macro
81#[cfg(feature = "resilience")]
82pub use allframe_macros::retry;
83/// Re-export GrpcError derive macro for automatic tonic::Status conversion
84#[cfg(feature = "router-grpc")]
85pub use allframe_macros::GrpcError;
86/// Re-export HealthCheck derive macro for automatic health check implementation
87#[cfg(feature = "di")]
88pub use allframe_macros::HealthCheck;
89/// Re-export Obfuscate derive macro for safe logging
90#[cfg(feature = "security")]
91pub use allframe_macros::Obfuscate;
92/// Re-export async_graphql for GraphQL support
93#[cfg(feature = "router-graphql")]
94pub use async_graphql;
95/// Re-export async_graphql_parser for GraphQL parsing
96#[cfg(feature = "router-graphql")]
97pub use async_graphql_parser;
98/// Re-export async_trait for async trait definitions
99pub use async_trait;
100/// Re-export backoff for retry/resilience patterns
101#[cfg(feature = "resilience")]
102pub use backoff;
103/// Re-export chrono for date/time handling
104#[cfg(feature = "utils")]
105pub use chrono;
106/// Re-export dashmap for concurrent hash maps
107#[cfg(feature = "cache-memory")]
108pub use dashmap;
109/// Re-export futures for async utilities
110#[cfg(feature = "router-grpc")]
111pub use futures;
112/// Re-export governor for rate limiting
113#[cfg(feature = "rate-limit")]
114pub use governor;
115/// Re-export hyper for HTTP primitives
116#[cfg(feature = "health")]
117pub use hyper;
118/// Re-export moka for high-performance caching
119#[cfg(feature = "cache-memory")]
120pub use moka;
121/// Re-export opentelemetry for full observability
122#[cfg(feature = "otel-otlp")]
123pub use opentelemetry;
124/// Re-export opentelemetry_otlp for OTLP exporter
125#[cfg(feature = "otel-otlp")]
126pub use opentelemetry_otlp;
127/// Re-export opentelemetry_sdk for SDK configuration
128#[cfg(feature = "otel-otlp")]
129pub use opentelemetry_sdk;
130/// Re-export parking_lot for efficient synchronization primitives
131#[cfg(feature = "utils")]
132pub use parking_lot;
133/// Re-export prometheus for metrics
134#[cfg(feature = "metrics")]
135pub use prometheus;
136/// Re-export prost for protobuf support
137#[cfg(feature = "router-grpc")]
138pub use prost;
139/// Re-export prost_types for well-known protobuf types
140#[cfg(feature = "router-grpc")]
141pub use prost_types;
142/// Re-export rand for random number generation
143#[cfg(feature = "utils")]
144pub use rand;
145/// Re-export redis for Redis client
146#[cfg(feature = "cache-redis")]
147pub use redis;
148/// Re-export reqwest for HTTP client functionality
149#[cfg(feature = "http-client")]
150pub use reqwest;
151/// Re-export serde for serialization
152pub use serde;
153/// Re-export serde_json for JSON handling
154pub use serde_json;
155/// Re-export tokio for async runtime
156pub use tokio;
157/// Re-export tokio_stream for async streams
158#[cfg(feature = "router-grpc")]
159pub use tokio_stream;
160/// Re-export tonic for gRPC support
161#[cfg(feature = "router-grpc")]
162pub use tonic;
163/// Re-export tonic_reflection for gRPC reflection
164#[cfg(feature = "router-grpc")]
165pub use tonic_reflection;
166/// Re-export tracing for observability
167#[cfg(feature = "otel")]
168pub use tracing;
169/// Re-export tracing_opentelemetry for tracing integration
170#[cfg(feature = "otel-otlp")]
171pub use tracing_opentelemetry;
172/// Re-export tracing_subscriber for log configuration
173#[cfg(feature = "otel-otlp")]
174pub use tracing_subscriber;
175/// Re-export url for URL parsing
176#[cfg(feature = "utils")]
177pub use url;
178
179/// Prelude module for convenient imports
180///
181/// Commonly used imports for AllFrame applications
182pub mod prelude {
183    /// Re-export cache utilities
184    pub use crate::cache::{Cache, CacheConfig, CacheKey, MemoryCache};
185    /// Re-export DI utilities
186    #[cfg(feature = "di")]
187    pub use crate::di::{
188        AsyncInit, AsyncInitWith, ContainerBuilder, DependencyError, DependencyRegistry, FromEnv,
189        Provider, Scope,
190    };
191    /// Re-export gRPC server utilities
192    #[cfg(feature = "router-grpc")]
193    pub use crate::grpc::{GrpcServer, GrpcServerBuilder, GrpcServerError, TlsConfig};
194    /// Re-export health check utilities
195    #[cfg(feature = "health")]
196    pub use crate::health::{
197        Dependency, DependencyStatus, HealthCheck, HealthReport, HealthServer, OverallStatus,
198        SimpleHealthCheck,
199    };
200    pub use crate::router::{
201        GraphQLAdapter, GrpcAdapter, GrpcRequest, GrpcStatus, Method, ProtocolAdapter, RestAdapter,
202        RestRequest, RestResponse, RouteMetadata, Router, ToJsonSchema,
203    };
204    #[cfg(feature = "router")]
205    pub use crate::router::{GraphQLConfig, GrpcConfig, RestConfig, RouterConfig, ServerConfig};
206    /// Re-export shutdown utilities
207    pub use crate::shutdown::{
208        GracefulShutdown, GracefulShutdownExt, ShutdownAwareTaskSpawner, ShutdownSignal,
209        ShutdownToken,
210    };
211    /// Re-export GrpcError for convenient error handling
212    #[cfg(feature = "router-grpc")]
213    pub use crate::GrpcError;
214}
215
216#[cfg(test)]
217mod tests {
218    #[test]
219    fn test_allframe_core_exists() {
220        // This test verifies the crate compiles
221        assert!(true);
222    }
223}