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,
}
}
}