ordinary-utils 0.9.1

Utils for Ordinary
Documentation
// Copyright (C) 2026 Ordinary Labs, LLC.
//
// SPDX-License-Identifier: AGPL-3.0-only

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
            }
        }),
    )
}