siera_cloudagent_python/cloudagent/
proof.rs

1use crate::agent::CloudAgentPython;
2use async_trait::async_trait;
3use serde_json::{json, Value};
4use siera_agent::error::Result;
5use siera_agent::modules::proof::{ProofModule, ProofRequestOptions, ProofRequestResponse};
6use std::collections::BTreeMap;
7
8#[async_trait]
9impl ProofModule for CloudAgentPython {
10    async fn send_request(&self, options: ProofRequestOptions) -> Result<ProofRequestResponse> {
11        let url = self.create_url(&["present-proof", "send-request"])?;
12
13        let mut requested_attributes: BTreeMap<String, Value> = BTreeMap::new();
14        let mut requested_predicates: BTreeMap<String, Value> = BTreeMap::new();
15
16        options.attributes.iter().for_each(|a| {
17            requested_attributes.insert(a.clone(), json!({ "name": a, }));
18        });
19
20        options.predicates.iter().for_each(|p| {
21            requested_predicates.insert(
22                p.0.clone(),
23                json!({ "name": p.0, "p_type": p.1, "p_value": p.2 }),
24            );
25        });
26
27        let body = json!({
28          "connection_id": options.connection_id,
29          "proof_request": {
30            "name": options.name,
31            "version": "1.0",
32            "requested_attributes": requested_attributes,
33            "requested_predicates": requested_predicates,
34          }
35        });
36
37        self.post(url, None, Some(body)).await
38    }
39}