siera_cloudagent_python/cloudagent/
proof.rs1use 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}