Skip to main content

messaging_api/
control.rs

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