6 releases

0.0.6 Apr 14, 2024
0.0.5 Apr 5, 2024
0.0.4 Mar 28, 2024
0.0.3 Feb 22, 2024
0.0.2 Dec 18, 2023

#334 in Asynchronous

Download history 151/week @ 2024-02-19 15/week @ 2024-02-26 5/week @ 2024-03-04 3/week @ 2024-03-11 134/week @ 2024-03-25 149/week @ 2024-04-01 150/week @ 2024-04-08 57/week @ 2024-04-15

490 downloads per month
Used in dwn-server

MIT/Apache and Apache-2.0…

140KB
3.5K SLoC

dwn

Rust implementation of a Decentralized Web Node.

Usage

use std::sync::Arc;

use dwn::{actor::Actor, message::Data, store::SurrealStore, DWN};
use surrealdb::{Surreal, engine::local::Mem};

#[tokio::main]
async fn main() {
    // Create a DWN, using in-memory SurrealDB for storage.
    let db = Surreal::new::<Mem>(()).await.unwrap();
    let store = SurrealStore::new(db).await.unwrap();
    let dwn = Arc::new(DWN::from(store));

    // Create an actor to send messages.
    // Here we generate a new `did:key` for the actor's identity,
    // but you could use any DID method.
    let actor = Actor::new_did_key(dwn).unwrap();

    // Create a new record.
    let data = "Hello, world!".bytes().collect::<Vec<_>>();

    let create = actor
        .create_record()
        .data(data.clone())
        .process()
        .await
        .unwrap();

    assert_eq!(create.reply.status.code, 200);

    // Read the record.
    let read = actor
        .read_record(create.record_id)
        .process()
        .await
        .unwrap();

    assert_eq!(read.status.code, 200);
    assert_eq!(read.record.data, Some(Data::new_base64(&data)));
}

Dependencies

~89MB
~1.5M SLoC