indy_data_types/anoncreds/
presentation.rs1use std::collections::HashMap;
2
3use crate::identifiers::cred_def::CredentialDefinitionId;
4use crate::identifiers::rev_reg::RevocationRegistryId;
5use crate::identifiers::schema::SchemaId;
6use crate::Validatable;
7
8#[derive(Debug)]
9#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
10pub struct Presentation {
11 pub proof: cl_type!(Proof),
12 pub requested_proof: RequestedProof,
13 pub identifiers: Vec<Identifier>,
14}
15
16#[derive(Clone, Debug, Default, PartialEq, Eq)]
17#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
18pub struct RequestedProof {
19 pub revealed_attrs: HashMap<String, RevealedAttributeInfo>,
20 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "HashMap::is_empty"))]
21 #[cfg_attr(feature = "serde", serde(default))]
22 pub revealed_attr_groups: HashMap<String, RevealedAttributeGroupInfo>,
23 #[cfg_attr(feature = "serde", serde(default))]
24 pub self_attested_attrs: HashMap<String, String>,
25 #[cfg_attr(feature = "serde", serde(default))]
26 pub unrevealed_attrs: HashMap<String, SubProofReferent>,
27 #[cfg_attr(feature = "serde", serde(default))]
28 pub predicates: HashMap<String, SubProofReferent>,
29}
30
31#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
32#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
33pub struct SubProofReferent {
34 pub sub_proof_index: u32,
35}
36
37#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
38#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
39pub struct RevealedAttributeInfo {
40 pub sub_proof_index: u32,
41 pub raw: String,
42 pub encoded: String,
43}
44
45#[derive(Clone, Debug, PartialEq, Eq)]
46#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
47pub struct RevealedAttributeGroupInfo {
48 pub sub_proof_index: u32,
49 pub values: HashMap<String , AttributeValue>,
50}
51
52#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
53#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
54pub struct AttributeValue {
55 pub raw: String,
56 pub encoded: String,
57}
58
59#[derive(Debug, Clone, PartialEq, Eq, Hash)]
60#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
61pub struct Identifier {
62 pub schema_id: SchemaId,
63 pub cred_def_id: CredentialDefinitionId,
64 pub rev_reg_id: Option<RevocationRegistryId>,
65 pub timestamp: Option<u64>,
66}
67
68impl Validatable for Presentation {}
69
70#[cfg(test)]
71mod tests {
72 #[cfg(feature = "serde")]
73 use super::*;
74
75 #[cfg(feature = "serde")]
76 #[test]
77 fn deserialize_requested_proof_with_empty_revealed_attr_groups() {
78 let mut req_proof_old: RequestedProof = Default::default();
79 req_proof_old.revealed_attrs.insert(
80 "attr1".to_string(),
81 RevealedAttributeInfo {
82 sub_proof_index: 0,
83 raw: "123".to_string(),
84 encoded: "123".to_string(),
85 },
86 );
87 let json = json!(req_proof_old).to_string();
88 let req_proof: RequestedProof = serde_json::from_str(&json).unwrap();
89 assert!(req_proof.revealed_attr_groups.is_empty())
90 }
91}