dwn_server/
lib.rs

1//! [Decentralized Web Node](https://identity.foundation/decentralized-web-node/spec/) HTTP server.
2
3use 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}