dwn 0.4.0

Rust implementation of a Decentralized Web Node.
Documentation
use dwn_core::message::{Version, descriptor::ProtocolDefinition, mime::TEXT_PLAIN};
use serde_json::json;
use tracing_test::traced_test;

use crate::utils::init_dwn;

mod create;

#[tokio::test]
#[traced_test]
async fn test_protocol_configure_query() {
    let (alice, ..) = init_dwn();

    let raw_definition = json!({
        "protocol": "my-protocol",
        "published": true,
        "types": {
            "my-value": {
                "dataFormat": ["text/plain"],
            },
            "non-value": {
                "dataFormat": ["text/plain"],
            }
        },
        "structure": {
            "my-value": {
                "$actions": [{
                    "who": "anyone",
                    "can": ["create"],
                }]
            },
            "non-value": {}
        }
    });
    let definition = serde_json::from_value::<ProtocolDefinition>(raw_definition).unwrap();
    let version = Version::new(1, 2, 3);

    alice
        .configure_protocol(version.clone(), definition.clone())
        .process()
        .await
        .unwrap();

    let data = "Hello, world!".as_bytes().to_vec();
    let path = "my-value".to_string();

    let record_id = alice
        .write()
        .protocol(definition.protocol.clone(), version.clone(), path.clone())
        .data(TEXT_PLAIN, data.clone())
        .target(&alice.did)
        .process()
        .await
        .unwrap();

    let found = alice
        .query()
        .protocol(definition.protocol)
        .protocol_version(version)
        .protocol_path(path)
        .process()
        .await
        .unwrap();
    assert_eq!(found.len(), 1);
    assert_eq!(found[0].entry().record_id, record_id);
}