tap_msg/message/
policy.rs1use serde::{Deserialize, Serialize};
6use std::collections::HashMap;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
10pub enum FromType {
11 #[serde(rename = "from")]
13 From(Vec<String>),
14
15 #[serde(rename = "fromRole")]
17 FromRole(Vec<String>),
18
19 #[serde(rename = "fromAgent")]
21 FromAgent(Vec<String>),
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
26pub struct RequireAuthorization {
27 #[serde(skip_serializing_if = "Option::is_none")]
29 pub from: Option<Vec<String>>,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub from_role: Option<Vec<String>>,
34
35 #[serde(skip_serializing_if = "Option::is_none")]
37 pub from_agent: Option<Vec<String>>,
38
39 #[serde(skip_serializing_if = "Option::is_none")]
41 pub purpose: Option<String>,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
46pub struct RequirePresentation {
47 #[serde(rename = "@context", skip_serializing_if = "Option::is_none")]
49 pub context: Option<Vec<String>>,
50
51 #[serde(skip_serializing_if = "Option::is_none")]
53 pub from: Option<Vec<String>>,
54
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub from_role: Option<Vec<String>>,
58
59 #[serde(skip_serializing_if = "Option::is_none")]
61 pub from_agent: Option<Vec<String>>,
62
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub about_party: Option<String>,
66
67 #[serde(skip_serializing_if = "Option::is_none")]
69 pub about_agent: Option<String>,
70
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub purpose: Option<String>,
74
75 #[serde(skip_serializing_if = "Option::is_none")]
77 pub presentation_definition: Option<String>,
78
79 #[serde(skip_serializing_if = "Option::is_none")]
81 pub credentials: Option<HashMap<String, Vec<String>>>,
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
86pub struct RequireProofOfControl {
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub from: Option<Vec<String>>,
90
91 #[serde(skip_serializing_if = "Option::is_none")]
93 pub from_role: Option<Vec<String>>,
94
95 #[serde(skip_serializing_if = "Option::is_none")]
97 pub from_agent: Option<Vec<String>>,
98
99 #[serde(default)]
101 pub address_id: String,
102
103 #[serde(skip_serializing_if = "Option::is_none")]
105 pub purpose: Option<String>,
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
110pub struct RequireRelationshipConfirmation {
111 #[serde(skip_serializing_if = "Option::is_none")]
113 pub from_role: Option<String>,
114
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub purpose: Option<String>,
118
119 #[serde(skip_serializing_if = "Option::is_none")]
121 pub nonce: Option<u64>,
122}
123
124#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
126#[serde(tag = "@type")]
127pub enum Policy {
128 RequireAuthorization(RequireAuthorization),
130
131 RequirePresentation(RequirePresentation),
133
134 RequireProofOfControl(RequireProofOfControl),
136
137 RequireRelationshipConfirmation(RequireRelationshipConfirmation),
139}
140
141impl Policy {
142 pub fn validate(&self) -> crate::error::Result<()> {
144 match self {
146 Policy::RequireAuthorization(_) => Ok(()),
147 Policy::RequirePresentation(_) => Ok(()),
148 Policy::RequireProofOfControl(_) => Ok(()),
149 Policy::RequireRelationshipConfirmation(_) => Ok(()),
150 }
151 }
152}
153
154impl Default for RequireAuthorization {
156 fn default() -> Self {
157 RequireAuthorization {
158 from: None,
159 from_role: None,
160 from_agent: None,
161 purpose: None,
162 }
163 }
164}