edc-web-components 0.8.1

A Rust Web Components with patternfly-yew client for EDC
Documentation
use edc_connector_client::types::contract_definition::ContractDefinition;

#[derive(Clone, Debug, PartialEq)]
pub struct ContractDefinitionItem {
  pub id: String,
  pub name: String,
  pub access_policy_id: String,
  pub contract_policy_id: String,
  pub asset_ids: Vec<String>,
}

impl From<ContractDefinition> for ContractDefinitionItem {
  fn from(contract_definition: ContractDefinition) -> Self {
    let id = contract_definition.id().to_string();
    let name = contract_definition
      .private_property("name")
      .map(|name| name.unwrap_or_default())
      .unwrap_or_default();
    let access_policy_id = contract_definition.access_policy_id().to_string();
    let contract_policy_id = contract_definition.contract_policy_id().to_string();

    let asset_ids = contract_definition
      .assets_selector()
      .iter()
      .flat_map(|criterion| match &criterion.operand_right().0 {
        serde_json::Value::String(identifier) => vec![identifier.to_string()],
        serde_json::Value::Array(identifiers) => identifiers
          .iter()
          .map(|identifier| identifier.as_str().unwrap_or_default().to_string())
          .collect(),
        _ => vec![],
      })
      .collect::<Vec<_>>();

    Self {
      id,
      name,
      access_policy_id,
      contract_policy_id,
      asset_ids,
    }
  }
}