ssi-data-integrity 0.3.0

Verifiable Credentials Data Model v1.1 for the `ssi` library.
Documentation
#![allow(unused)]
use std::collections::HashMap;

use iref::IriBuf;
use json_syntax::Print;
use serde::Deserialize;
use ssi_claims_core::VerificationParameters;
use ssi_data_integrity::{AnyDataIntegrity, AnySelectionOptions};
use ssi_verification_methods::AnyMethod;

#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SelectionTest {
    pub id: Option<IriBuf>,
    pub verification_methods: HashMap<IriBuf, AnyMethod>,
    pub options: AnySelectionOptions,
    pub input: AnyDataIntegrity,
    pub expected_output: json_syntax::Value,
}

impl SelectionTest {
    pub async fn run(mut self) {
        let params = VerificationParameters::from_resolver(self.verification_methods);

        let vc = self.input.select(params, self.options).await.unwrap();

        let mut json = json_syntax::to_value(vc).unwrap();
        json.canonicalize();

        self.expected_output.canonicalize();

        if json != self.expected_output {
            eprintln!("expected: {}", self.expected_output.pretty_print());
            eprintln!("found: {}", json.pretty_print());
            match self.id {
                Some(id) => panic!("test <{}> failed", id),
                None => panic!("test failed"),
            }
        }
    }
}