use crate::core::{ApiMetadata, Registration};
use crate::define_registration;
use axum::routing::MethodRouter;
#[cfg(test)]
use axum::Router;
#[cfg(test)]
use axum::body::Body;
pub mod response;
pub mod security_headers;
pub mod version_routing;
pub use response::{build_fallback_response, build_json_response};
pub use security_headers::SecurityHeaders;
pub use version_routing::{
VersionRouterConfig, VersionedRoute, build_version_router, version_redirect_middleware,
};
#[cfg(feature = "ratelimit")]
pub use crate::security::{LimiteronAdapter, RateLimitLayer, RateLimiter};
mod http_impl;
pub use http_impl::{build, build_with_config, build_with_redirect};
#[cfg(feature = "ratelimit")]
pub use http_impl::rate_limit_layer;
#[cfg(test)]
pub(crate) use http_impl::{apply_security_headers, get_or_generate_request_id, resolve_route_path};
pub(crate) const X_REQUEST_ID: &str = "x-request-id";
#[derive(Debug, Clone)]
pub struct HttpRoute {
path: String,
handler: MethodRouter,
metadata: ApiMetadata,
module_prefix: Option<String>,
}
define_registration!(RouteRegistration, HttpRoute, ApiMetadata);
inventory::collect!(HttpRoute);
#[cfg(test)]
mod tests;