xdid-core 0.7.0

Core types for DID methods to implement.
Documentation
use serde_json::Value;
use xdid_core::{
    did::{Did, MethodId, MethodName},
    did_url::{DidUrl, RelativeDidUrl, RelativeDidUrlPath},
    document::{Document, VerificationMethod, VerificationMethodMap},
};

#[test]
fn test_document_serde() {
    const EXPECTED_RAW: &[u8] = include_bytes!("./document-expected.json");

    let did = Did {
        method_name: MethodName("web".into()),
        method_id: MethodId("localhost%3A4000".to_string()),
    };

    let doc = Document {
        id: did.clone(),
        also_known_as: None,
        assertion_method: Some(vec![VerificationMethod::RelativeUrl(RelativeDidUrl {
            fragment: Some("owner".into()),
            path: RelativeDidUrlPath::Empty,
            query: None,
        })]),
        authentication: None,
        capability_delegation: Some(vec![VerificationMethod::Url(DidUrl {
            did: did.clone(),
            fragment: Some("owner".into()),
            path_abempty: None,
            query: Some("test-query".into()),
        })]),
        capability_invocation: None,
        controller: None,
        key_agreement: None,
        service: None,
        verification_method: Some(vec![VerificationMethodMap {
            id: DidUrl {
                did: did.clone(),
                fragment: Some("owner".into()),
                path_abempty: None,
                query: None,
            },
            controller: did,
            typ: "JsonWebKey2020".into(),
            public_key_multibase: None,
            public_key_jwk: None,
        }]),
    };

    let doc_val = serde_json::to_value(&doc).expect("serialization should succeed");
    println!(
        "{}",
        serde_json::to_string_pretty(&doc).expect("serialization should succeed")
    );

    let expected_val: Value =
        serde_json::from_slice(EXPECTED_RAW).expect("deserialization should succeed");
    assert_eq!(doc_val, expected_val);

    let expected_doc: Document =
        serde_json::from_slice(EXPECTED_RAW).expect("deserialization should succeed");
    assert_eq!(doc, expected_doc);
}