edc-connector-client 0.3.4

A Rust client for EDC
Documentation
use serde::{Deserialize, Serialize};
use serde_json::{json, Value};

use crate::EDC_NAMESPACE;

const ODRL_CONTEXT: &str = "http://www.w3.org/ns/odrl.jsonld";

#[derive(Deserialize, Debug)]
pub struct WithContext<T> {
    #[allow(dead_code)]
    #[serde(rename = "@context")]
    context: Value,
    #[serde(flatten)]
    pub(crate) inner: T,
}

#[derive(Serialize, Debug)]
pub struct WithContextRef<'a, T> {
    #[serde(rename = "@context")]
    context: Value,
    #[serde(flatten)]
    inner: &'a T,
}

impl<'a, T> WithContextRef<'a, T> {
    pub fn new(context: Value, inner: &'a T) -> WithContextRef<T> {
        WithContextRef { context, inner }
    }

    pub fn default_context(inner: &'a T) -> WithContextRef<T> {
        WithContextRef::new(json!({ "@vocab": EDC_NAMESPACE }), inner)
    }

    pub fn odrl_context(inner: &'a T) -> WithContextRef<T> {
        WithContextRef::new(json!([ ODRL_CONTEXT,{ "@vocab": EDC_NAMESPACE }]), inner)
    }
}

impl<T> WithContext<T> {
    pub fn new(context: Value, inner: T) -> WithContext<T> {
        WithContext { context, inner }
    }
}