edc-connector-client 0.4.0

A Rust client for EDC
Documentation
use bon::Builder;
use serde::{Deserialize, Serialize};

use crate::error::ConversionError;

use super::{
    data_address::DataAddress,
    properties::{FromValue, Properties, PropertyValue, ToValue},
};

#[derive(Debug, Serialize, Deserialize, Clone, Builder)]
#[serde(rename_all = "camelCase")]
pub struct Asset {
    #[builder(field)]
    properties: Properties,
    #[builder(field)]
    #[serde(default = "Default::default")]
    private_properties: Properties,
    #[builder(into)]
    #[serde(rename = "@id")]
    id: String,
    data_address: DataAddress,
}

#[derive(Debug, Serialize, Deserialize, Builder)]
#[serde(rename_all = "camelCase")]
pub struct NewAsset {
    #[builder(field)]
    properties: Properties,
    #[builder(field)]
    #[serde(default = "Default::default")]
    private_properties: Properties,
    #[builder(into)]
    #[serde(rename = "@id")]
    id: Option<String>,
    data_address: DataAddress,
}

impl NewAsset {}

impl Asset {
    pub fn property<T>(&self, property: &str) -> Result<Option<T>, ConversionError>
    where
        T: FromValue,
    {
        self.properties.get(property)
    }

    pub fn raw_property(&self, property: &str) -> Option<&PropertyValue>
where {
        self.properties.get_raw(property)
    }

    pub fn id(&self) -> &str {
        &self.id
    }

    pub fn properties(&self) -> &Properties {
        &self.properties
    }

    pub fn private_properties(&self) -> &Properties {
        &self.private_properties
    }

    pub fn data_address(&self) -> &DataAddress {
        &self.data_address
    }
}

impl<S: asset_builder::State> AssetBuilder<S> {
    pub fn property<T>(mut self, property: &str, value: T) -> Self
    where
        T: ToValue,
    {
        self.properties.set(property, value);
        self
    }

    pub fn private_property<T>(mut self, property: &str, value: T) -> Self
    where
        T: ToValue,
    {
        self.private_properties.set(property, value);
        self
    }
}

impl<S: new_asset_builder::State> NewAssetBuilder<S> {
    pub fn property<T>(mut self, property: &str, value: T) -> Self
    where
        T: ToValue,
    {
        self.properties.set(property, value);
        self
    }

    pub fn private_property<T>(mut self, property: &str, value: T) -> Self
    where
        T: ToValue,
    {
        self.private_properties.set(property, value);
        self
    }
}