Skip to main content

messaging_api/
control.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5#[serde(rename_all = "lowercase")]
6pub enum Placement {
7    Local,
8    Cloud,
9}
10
11#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
12#[serde(rename_all = "camelCase", deny_unknown_fields)]
13pub struct FrontendProvider {
14    pub provider: String,
15    pub deprecated: bool,
16    pub supported_placements: Vec<Placement>,
17}
18
19#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
20#[serde(rename_all = "camelCase", deny_unknown_fields)]
21pub struct ProviderListRequest {
22    pub placement: Placement,
23    pub frontend_providers: Vec<FrontendProvider>,
24}
25
26#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
27#[serde(rename_all = "camelCase", deny_unknown_fields)]
28pub struct ProviderMetadata {
29    pub provider: String,
30    pub display_name: String,
31    pub placement: Placement,
32    pub deprecated: bool,
33    pub available: bool,
34    #[serde(default, skip_serializing_if = "Option::is_none")]
35    pub disabled_reason: Option<String>,
36    pub setup_flow: String,
37    pub capabilities: Vec<ContentCapability>,
38    pub management_operations: Vec<ManagementOperation>,
39}
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
42#[serde(rename_all = "snake_case")]
43pub enum ContentCapability {
44    Text,
45    Markdown,
46    Image,
47    Audio,
48    Interaction,
49}
50
51#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
52pub enum ManagementOperation {
53    #[serde(rename = "connection.list")]
54    ConnectionList,
55    #[serde(rename = "connection.update")]
56    ConnectionUpdate,
57    #[serde(rename = "connection.delete")]
58    ConnectionDelete,
59    #[serde(rename = "connection.test")]
60    ConnectionTest,
61    #[serde(rename = "connection.status")]
62    ConnectionStatus,
63    #[serde(rename = "account.bind")]
64    AccountBind,
65    #[serde(rename = "account.unbind")]
66    AccountUnbind,
67    #[serde(rename = "account.binding.list")]
68    AccountBindingList,
69    #[serde(rename = "setup.options")]
70    SetupOptions,
71    #[serde(rename = "setup.start")]
72    SetupStart,
73    #[serde(rename = "setup.status")]
74    SetupStatus,
75}
76
77#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
78#[serde(rename_all = "camelCase", deny_unknown_fields)]
79pub struct ProviderListResponse {
80    pub providers: Vec<ProviderMetadata>,
81}
82
83#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
84#[serde(rename_all = "camelCase", deny_unknown_fields)]
85pub struct ProviderPlacementRequest {
86    pub provider: String,
87    pub placement: Placement,
88}
89
90#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
91#[serde(rename_all = "camelCase", deny_unknown_fields)]
92pub struct ConnectionUpdateRequest {
93    pub provider: String,
94    pub placement: Placement,
95    #[serde(default, skip_serializing_if = "Option::is_none")]
96    pub connection_id: Option<String>,
97    pub data: Value,
98}
99
100#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
101#[serde(rename_all = "camelCase", deny_unknown_fields)]
102pub struct ConnectionRequest {
103    pub provider: String,
104    pub placement: Placement,
105    pub connection_id: String,
106}
107
108#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
109#[serde(rename_all = "camelCase", deny_unknown_fields)]
110pub struct ConnectionTestRequest {
111    pub provider: String,
112    pub placement: Placement,
113    pub data: Value,
114}
115
116#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
117#[serde(rename_all = "camelCase", deny_unknown_fields)]
118pub struct MessagingConnection {
119    pub provider: String,
120    pub placement: Placement,
121    pub connection_id: String,
122    pub account_id: String,
123    #[serde(default, skip_serializing_if = "Option::is_none")]
124    pub display_name: Option<String>,
125    pub enabled: bool,
126    pub status: String,
127    #[serde(default, skip_serializing_if = "Option::is_none")]
128    pub status_message: Option<String>,
129    pub bound_to_current_scope: bool,
130    pub provider_data: Value,
131}
132
133#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
134#[serde(rename_all = "camelCase", deny_unknown_fields)]
135pub struct ConnectionListResponse {
136    pub connections: Vec<MessagingConnection>,
137}
138
139#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
140#[serde(rename_all = "camelCase", deny_unknown_fields)]
141pub struct ConnectionUpdateResponse {
142    pub connection: MessagingConnection,
143}
144
145#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
146#[serde(rename_all = "camelCase", deny_unknown_fields)]
147pub struct ConnectionTestResponse {
148    pub result: Value,
149}
150
151#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
152#[serde(rename_all = "camelCase", deny_unknown_fields)]
153pub struct ProviderStatus {
154    pub provider: String,
155    pub placement: Placement,
156    pub enabled: bool,
157    pub provider_data: Value,
158}
159
160#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
161#[serde(rename_all = "camelCase", deny_unknown_fields)]
162pub struct ConnectionStatusResponse {
163    pub status: ProviderStatus,
164}
165
166#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
167#[serde(rename_all = "camelCase", deny_unknown_fields)]
168pub struct MutationResponse {
169    pub success: bool,
170}
171
172#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
173#[serde(rename_all = "camelCase", deny_unknown_fields)]
174pub struct AccountBindingRequest {
175    pub provider: String,
176    pub placement: Placement,
177    pub account_id: String,
178}
179
180#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
181#[serde(rename_all = "camelCase", deny_unknown_fields)]
182pub struct AccountBinding {
183    pub tenant_id: String,
184    pub scope_id: String,
185    pub user_id: String,
186    pub default: bool,
187}
188
189#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
190#[serde(rename_all = "camelCase", deny_unknown_fields)]
191pub struct AccountBindingListResponse {
192    pub bindings: Vec<AccountBinding>,
193}
194
195#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
196#[serde(rename_all = "camelCase", deny_unknown_fields)]
197pub struct SetupStartRequest {
198    pub provider: String,
199    pub placement: Placement,
200    pub data: Value,
201}
202
203#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
204#[serde(rename_all = "camelCase", deny_unknown_fields)]
205pub struct SetupOptionsResponse {
206    pub options: Value,
207}
208
209#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
210#[serde(rename_all = "camelCase", deny_unknown_fields)]
211pub struct SetupStatusRequest {
212    pub provider: String,
213    pub placement: Placement,
214    pub setup_id: String,
215}
216
217#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
218#[serde(rename_all = "camelCase", deny_unknown_fields)]
219pub struct SetupAction {
220    #[serde(rename = "type")]
221    pub kind: String,
222    #[serde(default, skip_serializing_if = "Option::is_none")]
223    pub url: Option<String>,
224}
225
226#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
227#[serde(rename_all = "camelCase", deny_unknown_fields)]
228pub struct SetupState {
229    #[serde(default, skip_serializing_if = "Option::is_none")]
230    pub setup_id: Option<String>,
231    pub status: String,
232    #[serde(default, skip_serializing_if = "Option::is_none")]
233    pub expires_at_ms: Option<i64>,
234    #[serde(default, skip_serializing_if = "Option::is_none")]
235    pub action: Option<SetupAction>,
236    pub provider_data: Value,
237    #[serde(default, skip_serializing_if = "Option::is_none")]
238    pub connection_id: Option<String>,
239    #[serde(default, skip_serializing_if = "Option::is_none")]
240    pub message: Option<String>,
241}
242
243#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
244#[serde(rename_all = "camelCase", deny_unknown_fields)]
245pub struct SetupResponse {
246    pub setup: SetupState,
247}