Skip to main content

edc_web_components/models/
contract_definition_item.rs

1use edc_connector_client::types::contract_definition::ContractDefinition;
2
3#[derive(Clone, Debug, PartialEq)]
4pub struct ContractDefinitionItem {
5  pub id: String,
6  pub name: String,
7  pub access_policy_id: String,
8  pub contract_policy_id: String,
9  pub asset_ids: Vec<String>,
10}
11
12impl From<ContractDefinition> for ContractDefinitionItem {
13  fn from(contract_definition: ContractDefinition) -> Self {
14    let id = contract_definition.id().to_string();
15    let name = contract_definition
16      .private_property("name")
17      .map(|name| name.unwrap_or_default())
18      .unwrap_or_default();
19    let access_policy_id = contract_definition.access_policy_id().to_string();
20    let contract_policy_id = contract_definition.contract_policy_id().to_string();
21
22    let asset_ids = contract_definition
23      .assets_selector()
24      .iter()
25      .flat_map(|criterion| match &criterion.operand_right().0 {
26        serde_json::Value::String(identifier) => vec![identifier.to_string()],
27        serde_json::Value::Array(identifiers) => identifiers
28          .iter()
29          .map(|identifier| identifier.as_str().unwrap_or_default().to_string())
30          .collect(),
31        _ => vec![],
32      })
33      .collect::<Vec<_>>();
34
35    Self {
36      id,
37      name,
38      access_policy_id,
39      contract_policy_id,
40      asset_ids,
41    }
42  }
43}