use crate::json::JsonValuable;
use axum::Router;
use axum::http::StatusCode;
use axum::routing::post;
use bytes::BytesMut;
pub fn setup_routes<S>(path: &str) -> Router<S>
where
S: Clone + Send + Sync + 'static,
{
Router::new().route(
path,
post(|mut body: BytesMut| async move {
if let Ok(report) = simd_json::from_slice::<serde_json::Value>(body.as_mut()) {
let csp_span = tracing::info_span!("csp");
csp_span.in_scope(|| {
#[cfg(tracing_unstable)]
tracing::error!(report = tracing::field::valuable(&JsonValuable(report)));
#[cfg(not(tracing_unstable))]
tracing::error!(report = tracing::field::debug(&report));
});
StatusCode::OK
} else {
tracing::error!("failed to parse report");
StatusCode::UNSUPPORTED_MEDIA_TYPE
}
}),
)
}