#![forbid(unsafe_code)]
#![allow(missing_docs)]
#![warn(clippy::all)]
#![warn(clippy::pedantic)]
#![allow(clippy::struct_excessive_bools)] #![allow(clippy::cast_possible_truncation)] #![allow(clippy::cast_precision_loss)] #![allow(clippy::doc_markdown)] #![allow(clippy::module_name_repetitions)] #![allow(clippy::must_use_candidate)] #![allow(clippy::missing_errors_doc)] #![allow(clippy::missing_panics_doc)] #![allow(clippy::needless_pass_by_value)] #![allow(clippy::unused_async)] #![allow(clippy::similar_names)] #![allow(clippy::unused_self)] #![allow(clippy::match_same_arms)] #![allow(clippy::double_must_use)] #![allow(clippy::unnecessary_wraps)] #![allow(clippy::return_self_not_must_use)] #![allow(clippy::too_many_lines)] #![allow(clippy::cast_sign_loss)] #![allow(clippy::missing_fields_in_debug)] #![allow(clippy::default_trait_access)] #![allow(clippy::wildcard_imports)] #![allow(clippy::items_after_statements)] #![allow(clippy::no_effect_underscore_binding)] #![allow(clippy::cast_possible_wrap)] #![allow(clippy::struct_field_names)] #![allow(clippy::single_char_pattern)] #![allow(clippy::elidable_lifetime_names)] #![allow(clippy::manual_let_else)] #![allow(clippy::redundant_closure)] #![allow(clippy::unchecked_time_subtraction)] #![allow(clippy::uninlined_format_args)] #![allow(clippy::unnested_or_patterns)] #![allow(clippy::used_underscore_binding)] #![allow(clippy::cast_lossless)] #![allow(clippy::format_push_string)] #![allow(clippy::if_same_then_else)] #![allow(clippy::ignored_unit_patterns)] #![allow(clippy::map_unwrap_or)] #![allow(clippy::redundant_closure_for_method_calls)] #![allow(clippy::single_match_else)] #![allow(clippy::unnecessary_debug_formatting)] #![allow(clippy::useless_format)] #![allow(clippy::float_cmp)]
pub mod api;
pub mod error;
pub mod extractors;
pub mod federation;
pub mod logging;
pub mod middleware;
pub mod performance;
pub mod routes;
pub mod schema;
pub mod server;
pub mod server_config;
pub mod subscriptions;
pub mod validation;
pub mod metrics_server;
pub mod tracing_server;
pub mod config;
pub mod lifecycle;
pub mod observability;
pub mod operational;
pub mod resilience;
pub mod runtime_state;
pub mod tracing_utils;
pub mod webhooks;
pub mod files;
pub mod auth;
pub mod secrets;
pub mod secrets_manager;
pub mod encryption;
pub mod backup;
pub mod tls;
pub mod tls_listener;
#[cfg(feature = "observers")]
pub mod observers;
#[cfg(feature = "arrow")]
pub mod arrow;
#[cfg(any(test, feature = "testing"))]
pub mod testing;
pub use logging::{
ErrorDetails, LogLevel, LogMetrics, RequestContext, RequestId, RequestLogger, SourceLocation,
StructuredLogEntry,
};
pub use metrics_server::{MetricsCollector, PrometheusMetrics};
pub use performance::{
OperationProfile, PerformanceMonitor, PerformanceStats, PerformanceTimer, QueryPerformance,
};
pub use schema::CompiledSchemaLoader;
pub use secrets::SecretManager;
pub use server::Server;
pub use server_config::ServerConfig;
pub use tls::TlsSetup;
pub use tracing_server::{SpanStatus, TraceContext, TraceEvent, TraceParseError, TraceSpan};
pub use validation::{RequestValidator, ValidationError};
#[derive(Debug, thiserror::Error)]
pub enum ServerError {
#[error("Failed to bind server: {0}")]
BindError(String),
#[error("Configuration error: {0}")]
ConfigError(String),
#[error("Runtime error: {0}")]
RuntimeError(#[from] fraiseql_core::error::FraiseQLError),
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
#[error("Database error: {0}")]
Database(String),
#[error("Validation error: {0}")]
Validation(String),
#[error("Conflict: {0}")]
Conflict(String),
#[error("Not found: {0}")]
NotFound(String),
}
pub type Result<T> = std::result::Result<T, ServerError>;