pub mod app;
pub mod router;
pub mod handler;
pub mod middleware;
pub mod request;
pub mod response;
pub mod server;
pub mod static_files;
pub mod template;
pub mod auth;
pub mod cache;
pub mod compression;
pub mod database;
pub mod file_upload;
#[cfg(feature = "metrics")]
pub mod metrics;
pub mod session;
pub mod config;
pub mod error;
pub mod seo;
pub mod security;
pub mod websocket;
pub mod jobs;
pub mod health;
pub mod validation;
pub mod logging;
pub mod testing;
#[cfg(feature = "dev")]
pub mod dev;
pub use app::App;
pub use router::{Router, Route};
pub use handler::Handler;
pub use middleware::Middleware;
pub use request::Request;
pub use response::Response;
pub use server::Server;
pub use config::Settings;
pub use error::{AppError, AppResult};
pub use static_files::StaticFiles;
pub use database::Database;
pub use session::{Session, SessionHandle, SessionMiddleware, MemorySessionStore, SessionStore};
pub use security::{SecurityHeaders, RateLimiter, CsrfProtection};
pub use auth::{JwtAuth, AuthMiddleware, Claims, SessionAuth, login_session, logout_session, require_role};
pub use logging::{LoggingMiddleware, init_tracing};
pub use testing::{TestClient, TestResponse};
pub use file_upload::{FileUpload, parse_multipart};
pub use compression::CompressionMiddleware;
pub use websocket::{WebSocketManager, WebSocketConnection, is_websocket_upgrade};
pub use jobs::{JobQueue, Job};
pub use health::{HealthCheck, DetailedHealthCheck};
pub use hyper::{Body, Method, StatusCode};
pub use serde::{Deserialize, Serialize};
pub use serde_json::{json, Value};
pub use async_trait::async_trait;
pub use hyper;
pub type BoxError = Box<dyn std::error::Error + Send + Sync>;
pub use tracing;
pub use bcrypt;
pub fn hash_password(password: &str) -> Result<String, bcrypt::BcryptError> {
bcrypt::hash(password, bcrypt::DEFAULT_COST)
}
pub fn verify_password(password: &str, hash: &str) -> Result<bool, bcrypt::BcryptError> {
bcrypt::verify(password, hash)
}