dwn 0.4.0

Rust implementation of a Decentralized Web Node.
Documentation
use dwn_core::{message::descriptor::Descriptor, reply::RecordsQueryReply};
use reqwest::StatusCode;
use tracing::warn;

use crate::ProcessContext;

pub async fn handle(
    ProcessContext {
        rs,
        validation,
        target,
        msg,
        ..
    }: ProcessContext<'_>,
) -> Result<RecordsQueryReply, StatusCode> {
    debug_assert!(matches!(msg.descriptor, Descriptor::RecordsQuery(_)));

    let Descriptor::RecordsQuery(desc) = msg.descriptor else {
        panic!("invalid descriptor: {:?}", msg.descriptor);
    };

    let authorized = validation.authenticated.contains(target);

    rs.query(target, &desc.filter.unwrap_or_default(), authorized)
        .map(|entries| RecordsQueryReply { entries })
        .map_err(|e| {
            warn!("Query failed: {:?}", e);
            StatusCode::INTERNAL_SERVER_ERROR
        })
}