redis_cloud/
cloud_accounts.rs1use crate::{CloudClient, Result};
50use serde::{Deserialize, Serialize};
51use serde_json::Value;
52use std::collections::HashMap;
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
60#[serde(rename_all = "camelCase")]
61pub struct CloudAccountUpdateRequest {
62 #[serde(skip_serializing_if = "Option::is_none")]
64 pub name: Option<String>,
65
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub cloud_account_id: Option<i32>,
68
69 pub access_key_id: String,
71
72 pub access_secret_key: String,
74
75 pub console_username: String,
77
78 pub console_password: String,
80
81 #[serde(skip_serializing_if = "Option::is_none")]
83 pub sign_in_login_url: Option<String>,
84
85 #[serde(skip_serializing_if = "Option::is_none")]
86 pub command_type: Option<String>,
87
88 #[serde(flatten)]
90 pub extra: Value,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
95#[serde(rename_all = "camelCase")]
96pub struct CloudAccount {
97 #[serde(skip_serializing_if = "Option::is_none")]
98 pub id: Option<i32>,
99
100 #[serde(skip_serializing_if = "Option::is_none")]
101 pub name: Option<String>,
102
103 #[serde(skip_serializing_if = "Option::is_none")]
104 pub status: Option<String>,
105
106 #[serde(skip_serializing_if = "Option::is_none")]
107 pub access_key_id: Option<String>,
108
109 #[serde(skip_serializing_if = "Option::is_none")]
110 pub sign_in_login_url: Option<String>,
111
112 #[serde(skip_serializing_if = "Option::is_none")]
113 pub provider: Option<String>,
114
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub links: Option<Vec<HashMap<String, Value>>>,
118
119 #[serde(flatten)]
121 pub extra: Value,
122}
123
124#[derive(Debug, Clone, Serialize, Deserialize)]
126#[serde(rename_all = "camelCase")]
127pub struct CloudAccountCreateRequest {
128 pub name: String,
130
131 #[serde(skip_serializing_if = "Option::is_none")]
133 pub provider: Option<String>,
134
135 pub access_key_id: String,
137
138 pub access_secret_key: String,
140
141 pub console_username: String,
143
144 pub console_password: String,
146
147 pub sign_in_login_url: String,
149
150 #[serde(skip_serializing_if = "Option::is_none")]
151 pub command_type: Option<String>,
152
153 #[serde(flatten)]
155 pub extra: Value,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize)]
160#[serde(rename_all = "camelCase")]
161pub struct CloudAccounts {
162 #[serde(skip_serializing_if = "Option::is_none")]
163 pub account_id: Option<i32>,
164
165 #[serde(skip_serializing_if = "Option::is_none")]
167 pub links: Option<Vec<HashMap<String, Value>>>,
168
169 #[serde(flatten)]
171 pub extra: Value,
172}
173
174#[derive(Debug, Clone, Serialize, Deserialize)]
176#[serde(rename_all = "camelCase")]
177pub struct ProcessorResponse {
178 #[serde(skip_serializing_if = "Option::is_none")]
179 pub resource_id: Option<i32>,
180
181 #[serde(skip_serializing_if = "Option::is_none")]
182 pub additional_resource_id: Option<i32>,
183
184 #[serde(skip_serializing_if = "Option::is_none")]
185 pub resource: Option<HashMap<String, Value>>,
186
187 #[serde(skip_serializing_if = "Option::is_none")]
188 pub error: Option<String>,
189
190 #[serde(skip_serializing_if = "Option::is_none")]
191 pub additional_info: Option<String>,
192
193 #[serde(flatten)]
195 pub extra: Value,
196}
197
198#[derive(Debug, Clone, Serialize, Deserialize)]
200#[serde(rename_all = "camelCase")]
201pub struct TaskStateUpdate {
202 #[serde(skip_serializing_if = "Option::is_none")]
203 pub task_id: Option<String>,
204
205 #[serde(skip_serializing_if = "Option::is_none")]
206 pub command_type: Option<String>,
207
208 #[serde(skip_serializing_if = "Option::is_none")]
209 pub status: Option<String>,
210
211 #[serde(skip_serializing_if = "Option::is_none")]
212 pub description: Option<String>,
213
214 #[serde(skip_serializing_if = "Option::is_none")]
215 pub timestamp: Option<String>,
216
217 #[serde(skip_serializing_if = "Option::is_none")]
218 pub response: Option<ProcessorResponse>,
219
220 #[serde(skip_serializing_if = "Option::is_none")]
222 pub links: Option<Vec<HashMap<String, Value>>>,
223
224 #[serde(flatten)]
226 pub extra: Value,
227}
228
229pub struct CloudAccountsHandler {
238 client: CloudClient,
239}
240
241impl CloudAccountsHandler {
242 pub fn new(client: CloudClient) -> Self {
244 Self { client }
245 }
246
247 pub async fn get_cloud_accounts(&self) -> Result<CloudAccounts> {
252 self.client.get("/cloud-accounts").await
253 }
254
255 pub async fn create_cloud_account(
260 &self,
261 request: &CloudAccountCreateRequest,
262 ) -> Result<TaskStateUpdate> {
263 self.client.post("/cloud-accounts", request).await
264 }
265
266 pub async fn delete_cloud_account(&self, cloud_account_id: i32) -> Result<TaskStateUpdate> {
271 let response = self
272 .client
273 .delete_raw(&format!("/cloud-accounts/{}", cloud_account_id))
274 .await?;
275 serde_json::from_value(response).map_err(Into::into)
276 }
277
278 pub async fn get_cloud_account_by_id(&self, cloud_account_id: i32) -> Result<CloudAccount> {
283 self.client
284 .get(&format!("/cloud-accounts/{}", cloud_account_id))
285 .await
286 }
287
288 pub async fn update_cloud_account(
293 &self,
294 cloud_account_id: i32,
295 request: &CloudAccountUpdateRequest,
296 ) -> Result<TaskStateUpdate> {
297 self.client
298 .put(&format!("/cloud-accounts/{}", cloud_account_id), request)
299 .await
300 }
301}