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}