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}