siera_agent/modules/
connection.rs1use crate::error::Result;
2use async_trait::async_trait;
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6#[derive(Debug, Default, Serialize, Deserialize)]
8pub struct ConnectionGetAllOptions {
9 pub alias: Option<String>,
11
12 pub connection_protocol: Option<String>,
15
16 pub invitation_key: Option<String>,
18
19 pub my_did: Option<String>,
21
22 pub state: Option<String>,
25
26 pub their_did: Option<String>,
28
29 pub their_role: Option<String>,
32}
33
34#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
36pub struct Invitation {
37 #[serde(alias = "invitationUrl")]
39 pub invitation_url: String,
40 pub invitation: Value,
42
43 #[serde(alias = "connection_id")]
45 pub id: String,
46}
47
48#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
50pub struct Connection {
51 #[serde(alias = "connection_id")]
53 pub id: String,
54
55 #[serde(alias = "createdAt")]
57 pub created_at: String,
58
59 #[serde(alias = "my_did")]
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub did: Option<String>,
63
64 pub state: String,
66
67 #[serde(alias = "their_role")]
69 pub role: String,
70
71 #[serde(alias = "accept", alias = "autoAcceptConnection")]
73 #[serde(skip_serializing_if = "Option::is_none")]
74 pub auto_accept: Option<Value>,
75
76 #[serde(alias = "theirLabel")]
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub their_label: Option<String>,
80
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub their_did: Option<String>,
84
85 #[serde(skip_serializing_if = "Option::is_none")]
87 pub verkey: Option<String>,
88}
89
90#[derive(Debug, Default)]
92pub struct ConnectionCreateInvitationOptions {
93 pub auto_accept: bool,
95
96 pub qr: bool,
98
99 pub toolbox: bool,
101
102 pub multi_use: bool,
104
105 pub alias: Option<String>,
107}
108
109#[derive(Debug, Serialize, Deserialize)]
111#[serde(rename_all = "camelCase")]
112pub struct ConnectionReceiveInvitationOptions {
116 #[serde(rename = "@id")]
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub id: Option<String>,
120
121 #[serde(skip_serializing_if = "Option::is_none")]
123 pub did: Option<String>,
124
125 #[serde(skip_serializing_if = "Option::is_none")]
127 pub image_url: Option<String>,
128
129 #[serde(skip_serializing_if = "Option::is_none")]
131 pub label: Option<String>,
132
133 #[serde(skip_serializing_if = "Option::is_none")]
135 pub recipient_keys: Option<Vec<String>>,
136
137 #[serde(skip_serializing_if = "Option::is_none")]
139 pub routing_keys: Option<Vec<String>>,
140
141 #[serde(skip_serializing_if = "Option::is_none")]
143 pub service_endpoint: Option<String>,
144}
145
146#[async_trait]
148pub trait ConnectionModule {
149 async fn get_all(&self, options: ConnectionGetAllOptions) -> Result<Vec<Connection>>;
151
152 async fn get_by_id(&self, id: String) -> Result<Connection>;
154
155 async fn create_invitation(
157 &self,
158 options: ConnectionCreateInvitationOptions,
159 ) -> Result<Invitation>;
160
161 async fn receive_invitation(
163 &self,
164 invitation: ConnectionReceiveInvitationOptions,
165 ) -> Result<Connection>;
166}