1use std::sync::Arc;
4
5use axum::{
6 extract::State,
7 http::StatusCode,
8 response::{IntoResponse, Response},
9 routing::post,
10 Json, Router,
11};
12use dwn::{
13 message::DwnRequest,
14 store::{DataStore, MessageStore},
15 DWN,
16};
17use tracing::warn;
18
19pub fn router(dwn: Arc<DWN<impl DataStore + 'static, impl MessageStore + 'static>>) -> Router {
20 Router::new().route("/", post(handle_post)).with_state(dwn)
21}
22
23async fn handle_post(
24 State(dwn): State<Arc<DWN<impl DataStore + 'static, impl MessageStore + 'static>>>,
25 Json(request): Json<DwnRequest>,
26) -> Response {
27 match dwn.process_message(request).await {
28 Ok(reply) => Json(reply).into_response(),
29 Err(err) => {
30 warn!("Error processing message: {:?}", err);
31 StatusCode::INTERNAL_SERVER_ERROR.into_response()
32 }
33 }
34}