redis_cloud/connectivity/
psc.rs1use crate::{CloudClient, Result};
41use serde::{Deserialize, Serialize};
42
43#[derive(Debug, Clone, Serialize, Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub struct PscEndpointUpdateRequest {
47 pub subscription_id: i32,
50 pub psc_service_id: i32,
52 pub endpoint_id: i32,
54
55 #[serde(skip_serializing_if = "Option::is_none")]
57 pub gcp_project_id: Option<String>,
58
59 #[serde(skip_serializing_if = "Option::is_none")]
61 pub gcp_vpc_name: Option<String>,
62
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub gcp_vpc_subnet_name: Option<String>,
66
67 #[serde(skip_serializing_if = "Option::is_none")]
69 pub endpoint_connection_name: Option<String>,
70}
71
72pub use crate::types::TaskStateUpdate;
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
77#[serde(rename_all = "camelCase")]
78pub struct PrivateServiceConnectService {
79 #[serde(skip_serializing_if = "Option::is_none")]
81 pub id: Option<i32>,
82
83 #[serde(skip_serializing_if = "Option::is_none")]
85 pub connection_host_name: Option<String>,
86
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub service_attachment_name: Option<String>,
90
91 #[serde(skip_serializing_if = "Option::is_none")]
93 pub status: Option<String>,
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize)]
98#[serde(rename_all = "camelCase")]
99pub struct PrivateServiceConnectEndpoint {
100 #[serde(skip_serializing_if = "Option::is_none")]
102 pub id: Option<i32>,
103
104 #[serde(skip_serializing_if = "Option::is_none")]
106 pub gcp_project_id: Option<String>,
107
108 #[serde(skip_serializing_if = "Option::is_none")]
110 pub gcp_vpc_name: Option<String>,
111
112 #[serde(skip_serializing_if = "Option::is_none")]
114 pub gcp_vpc_subnet_name: Option<String>,
115
116 #[serde(skip_serializing_if = "Option::is_none")]
118 pub endpoint_connection_name: Option<String>,
119
120 #[serde(skip_serializing_if = "Option::is_none")]
122 pub status: Option<String>,
123}
124
125#[derive(Debug, Clone, Serialize, Deserialize)]
127#[serde(rename_all = "camelCase")]
128pub struct PrivateServiceConnectEndpoints {
129 #[serde(skip_serializing_if = "Option::is_none")]
131 pub psc_service_id: Option<i32>,
132
133 #[serde(skip_serializing_if = "Option::is_none")]
135 pub endpoints: Option<Vec<PrivateServiceConnectEndpoint>>,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize)]
140#[serde(rename_all = "camelCase")]
141pub struct GcpCreationScript {
142 #[serde(skip_serializing_if = "Option::is_none")]
144 pub bash: Option<String>,
145
146 #[serde(skip_serializing_if = "Option::is_none")]
148 pub powershell: Option<String>,
149
150 #[serde(skip_serializing_if = "Option::is_none")]
152 pub terraform_gcp: Option<TerraformGcp>,
153}
154
155#[derive(Debug, Clone, Serialize, Deserialize)]
157#[serde(rename_all = "camelCase")]
158pub struct TerraformGcp {
159 #[serde(skip_serializing_if = "Option::is_none")]
161 pub service_attachments: Option<Vec<TerraformGcpServiceAttachment>>,
162}
163
164#[derive(Debug, Clone, Serialize, Deserialize)]
166#[serde(rename_all = "camelCase")]
167pub struct TerraformGcpServiceAttachment {
168 #[serde(skip_serializing_if = "Option::is_none")]
170 pub name: Option<String>,
171
172 #[serde(skip_serializing_if = "Option::is_none")]
174 pub dns_record: Option<String>,
175
176 #[serde(skip_serializing_if = "Option::is_none")]
178 pub ip_address_name: Option<String>,
179
180 #[serde(skip_serializing_if = "Option::is_none")]
182 pub forwarding_rule_name: Option<String>,
183}
184
185#[derive(Debug, Clone, Serialize, Deserialize)]
187#[serde(rename_all = "camelCase")]
188pub struct GcpDeletionScript {
189 #[serde(skip_serializing_if = "Option::is_none")]
191 pub bash: Option<String>,
192
193 #[serde(skip_serializing_if = "Option::is_none")]
195 pub powershell: Option<String>,
196}
197
198pub struct PscHandler {
200 client: CloudClient,
201}
202
203impl PscHandler {
204 #[must_use]
206 pub fn new(client: CloudClient) -> Self {
207 Self { client }
208 }
209
210 pub async fn delete_service(&self, subscription_id: i32) -> Result<TaskStateUpdate> {
216 self.client
217 .delete_typed(&format!(
218 "/subscriptions/{subscription_id}/private-service-connect"
219 ))
220 .await
221 }
222
223 pub async fn get_service(&self, subscription_id: i32) -> Result<TaskStateUpdate> {
225 self.client
226 .get(&format!(
227 "/subscriptions/{subscription_id}/private-service-connect"
228 ))
229 .await
230 }
231
232 pub async fn create_service(&self, subscription_id: i32) -> Result<TaskStateUpdate> {
234 self.client
235 .post(
236 &format!("/subscriptions/{subscription_id}/private-service-connect"),
237 &serde_json::json!({}),
238 )
239 .await
240 }
241
242 pub async fn create_endpoint(
244 &self,
245 subscription_id: i32,
246 psc_service_id: i32,
247 request: &PscEndpointUpdateRequest,
248 ) -> Result<TaskStateUpdate> {
249 self.client
250 .post(
251 &format!(
252 "/subscriptions/{subscription_id}/private-service-connect/{psc_service_id}"
253 ),
254 request,
255 )
256 .await
257 }
258
259 pub async fn get_endpoints(
263 &self,
264 subscription_id: i32,
265 psc_service_id: i32,
266 ) -> Result<TaskStateUpdate> {
267 self.client
268 .get(&format!(
269 "/subscriptions/{subscription_id}/private-service-connect/{psc_service_id}"
270 ))
271 .await
272 }
273
274 pub async fn delete_endpoint(
276 &self,
277 subscription_id: i32,
278 psc_service_id: i32,
279 endpoint_id: i32,
280 ) -> Result<TaskStateUpdate> {
281 self.client
282 .delete_typed(&format!(
283 "/subscriptions/{subscription_id}/private-service-connect/{psc_service_id}/endpoints/{endpoint_id}"
284 ))
285 .await
286 }
287
288 pub async fn update_endpoint(
290 &self,
291 subscription_id: i32,
292 psc_service_id: i32,
293 endpoint_id: i32,
294 request: &PscEndpointUpdateRequest,
295 ) -> Result<TaskStateUpdate> {
296 self.client
297 .put(
298 &format!(
299 "/subscriptions/{subscription_id}/private-service-connect/{psc_service_id}/endpoints/{endpoint_id}"
300 ),
301 request,
302 )
303 .await
304 }
305
306 pub async fn get_endpoint_creation_script(
308 &self,
309 subscription_id: i32,
310 psc_service_id: i32,
311 endpoint_id: i32,
312 ) -> Result<String> {
313 self.client
314 .get(&format!(
315 "/subscriptions/{subscription_id}/private-service-connect/{psc_service_id}/endpoints/{endpoint_id}/creationScripts"
316 ))
317 .await
318 }
319
320 pub async fn get_endpoint_deletion_script(
322 &self,
323 subscription_id: i32,
324 psc_service_id: i32,
325 endpoint_id: i32,
326 ) -> Result<String> {
327 self.client
328 .get(&format!(
329 "/subscriptions/{subscription_id}/private-service-connect/{psc_service_id}/endpoints/{endpoint_id}/deletionScripts"
330 ))
331 .await
332 }
333
334 pub async fn delete_service_active_active(
340 &self,
341 subscription_id: i32,
342 region_id: i32,
343 ) -> Result<TaskStateUpdate> {
344 self.client
345 .delete_typed(&format!(
346 "/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect"
347 ))
348 .await
349 }
350
351 pub async fn get_service_active_active(
353 &self,
354 subscription_id: i32,
355 region_id: i32,
356 ) -> Result<TaskStateUpdate> {
357 self.client
358 .get(&format!(
359 "/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect"
360 ))
361 .await
362 }
363
364 pub async fn create_service_active_active(
366 &self,
367 subscription_id: i32,
368 region_id: i32,
369 ) -> Result<TaskStateUpdate> {
370 self.client
371 .post(
372 &format!(
373 "/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect"
374 ),
375 &serde_json::json!({}),
376 )
377 .await
378 }
379
380 pub async fn create_endpoint_active_active(
383 &self,
384 subscription_id: i32,
385 region_id: i32,
386 psc_service_id: i32,
387 request: &PscEndpointUpdateRequest,
388 ) -> Result<TaskStateUpdate> {
389 self.client
390 .post(
391 &format!(
392 "/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect/{psc_service_id}"
393 ),
394 request,
395 )
396 .await
397 }
398
399 pub async fn get_endpoints_active_active(
404 &self,
405 subscription_id: i32,
406 region_id: i32,
407 psc_service_id: i32,
408 ) -> Result<TaskStateUpdate> {
409 self.client
410 .get(&format!(
411 "/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect/{psc_service_id}"
412 ))
413 .await
414 }
415
416 pub async fn delete_endpoint_active_active(
418 &self,
419 subscription_id: i32,
420 region_id: i32,
421 psc_service_id: i32,
422 endpoint_id: i32,
423 ) -> Result<TaskStateUpdate> {
424 self.client.delete_typed(&format!(
425 "/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect/{psc_service_id}/endpoints/{endpoint_id}"
426 )).await
427 }
428
429 pub async fn update_endpoint_active_active(
431 &self,
432 subscription_id: i32,
433 region_id: i32,
434 psc_service_id: i32,
435 endpoint_id: i32,
436 request: &PscEndpointUpdateRequest,
437 ) -> Result<TaskStateUpdate> {
438 self.client
439 .put(
440 &format!(
441 "/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect/{psc_service_id}/endpoints/{endpoint_id}"
442 ),
443 request,
444 )
445 .await
446 }
447
448 pub async fn get_endpoint_creation_script_active_active(
450 &self,
451 subscription_id: i32,
452 region_id: i32,
453 psc_service_id: i32,
454 endpoint_id: i32,
455 ) -> Result<String> {
456 self.client
457 .get(&format!(
458 "/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect/{psc_service_id}/endpoints/{endpoint_id}/creationScripts"
459 ))
460 .await
461 }
462
463 pub async fn get_endpoint_deletion_script_active_active(
465 &self,
466 subscription_id: i32,
467 region_id: i32,
468 psc_service_id: i32,
469 endpoint_id: i32,
470 ) -> Result<String> {
471 self.client
472 .get(&format!(
473 "/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect/{psc_service_id}/endpoints/{endpoint_id}/deletionScripts"
474 ))
475 .await
476 }
477}