redis_cloud/connectivity/
vpc_peering.rs1use crate::{CloudClient, Result};
61use serde::{Deserialize, Serialize};
62
63#[derive(Debug, Clone, Default, Serialize, Deserialize)]
77#[serde(rename_all = "camelCase")]
78pub struct VpcPeeringCreateRequest {
79 #[serde(skip_serializing_if = "Option::is_none")]
81 pub provider: Option<String>,
82
83 #[serde(skip_serializing_if = "Option::is_none")]
85 pub command_type: Option<String>,
86
87 #[serde(rename = "region", skip_serializing_if = "Option::is_none")]
90 pub aws_region: Option<String>,
91
92 #[serde(skip_serializing_if = "Option::is_none")]
94 pub aws_account_id: Option<String>,
95
96 #[serde(skip_serializing_if = "Option::is_none")]
98 pub vpc_id: Option<String>,
99
100 #[serde(skip_serializing_if = "Option::is_none")]
102 pub vpc_cidr: Option<String>,
103
104 #[serde(skip_serializing_if = "Option::is_none")]
106 pub vpc_cidrs: Option<Vec<String>>,
107
108 #[serde(rename = "vpcProjectUid", skip_serializing_if = "Option::is_none")]
111 pub gcp_project_id: Option<String>,
112
113 #[serde(rename = "vpcNetworkName", skip_serializing_if = "Option::is_none")]
115 pub network_name: Option<String>,
116}
117
118impl VpcPeeringCreateRequest {
119 #[must_use]
125 pub fn for_aws(
126 region: impl Into<String>,
127 aws_account_id: impl Into<String>,
128 vpc_id: impl Into<String>,
129 ) -> Self {
130 Self {
131 provider: Some("AWS".to_string()),
132 aws_region: Some(region.into()),
133 aws_account_id: Some(aws_account_id.into()),
134 vpc_id: Some(vpc_id.into()),
135 ..Self::default()
136 }
137 }
138
139 #[must_use]
144 pub fn for_gcp(project_uid: impl Into<String>, network_name: impl Into<String>) -> Self {
145 Self {
146 provider: Some("GCP".to_string()),
147 gcp_project_id: Some(project_uid.into()),
148 network_name: Some(network_name.into()),
149 ..Self::default()
150 }
151 }
152}
153
154pub type VpcPeeringCreateBaseRequest = VpcPeeringCreateRequest;
156
157#[derive(Debug, Clone, Default, Serialize, Deserialize)]
171#[serde(rename_all = "camelCase")]
172pub struct ActiveActiveVpcPeeringCreateRequest {
173 #[serde(skip_serializing_if = "Option::is_none")]
175 pub provider: Option<String>,
176
177 #[serde(skip_serializing_if = "Option::is_none")]
179 pub command_type: Option<String>,
180
181 #[serde(skip_serializing_if = "Option::is_none")]
184 pub source_region: Option<String>,
185
186 #[serde(skip_serializing_if = "Option::is_none")]
189 pub destination_region: Option<String>,
190
191 #[serde(skip_serializing_if = "Option::is_none")]
193 pub aws_account_id: Option<String>,
194
195 #[serde(skip_serializing_if = "Option::is_none")]
197 pub vpc_id: Option<String>,
198
199 #[serde(skip_serializing_if = "Option::is_none")]
201 pub vpc_cidr: Option<String>,
202
203 #[serde(skip_serializing_if = "Option::is_none")]
205 pub vpc_cidrs: Option<Vec<String>>,
206
207 #[serde(rename = "vpcProjectUid", skip_serializing_if = "Option::is_none")]
210 pub gcp_project_id: Option<String>,
211
212 #[serde(rename = "vpcNetworkName", skip_serializing_if = "Option::is_none")]
214 pub network_name: Option<String>,
215}
216
217impl ActiveActiveVpcPeeringCreateRequest {
218 #[must_use]
224 pub fn for_aws(
225 source_region: impl Into<String>,
226 destination_region: impl Into<String>,
227 aws_account_id: impl Into<String>,
228 vpc_id: impl Into<String>,
229 ) -> Self {
230 Self {
231 provider: Some("AWS".to_string()),
232 source_region: Some(source_region.into()),
233 destination_region: Some(destination_region.into()),
234 aws_account_id: Some(aws_account_id.into()),
235 vpc_id: Some(vpc_id.into()),
236 ..Self::default()
237 }
238 }
239
240 #[must_use]
245 pub fn for_gcp(
246 source_region: impl Into<String>,
247 project_uid: impl Into<String>,
248 network_name: impl Into<String>,
249 ) -> Self {
250 Self {
251 provider: Some("GCP".to_string()),
252 source_region: Some(source_region.into()),
253 gcp_project_id: Some(project_uid.into()),
254 network_name: Some(network_name.into()),
255 ..Self::default()
256 }
257 }
258}
259
260#[derive(Debug, Clone, Serialize, Deserialize)]
262#[serde(rename_all = "camelCase")]
263pub struct VpcPeeringUpdateAwsRequest {
264 #[serde(skip_serializing_if = "Option::is_none")]
266 pub subscription_id: Option<i32>,
267
268 #[serde(skip_serializing_if = "Option::is_none")]
270 pub vpc_peering_id: Option<i32>,
271
272 #[serde(skip_serializing_if = "Option::is_none")]
274 pub vpc_cidr: Option<String>,
275
276 #[serde(skip_serializing_if = "Option::is_none")]
278 pub vpc_cidrs: Option<Vec<String>>,
279
280 #[serde(skip_serializing_if = "Option::is_none")]
283 pub command_type: Option<String>,
284}
285
286pub type VpcPeeringUpdateRequest = VpcPeeringUpdateAwsRequest;
288
289pub use crate::types::TaskStateUpdate;
291
292#[derive(Debug, Clone, Serialize, Deserialize)]
294#[serde(rename_all = "camelCase")]
295pub struct VpcCidr {
296 #[serde(skip_serializing_if = "Option::is_none")]
298 pub vpc_cidr: Option<String>,
299
300 #[serde(rename = "active", skip_serializing_if = "Option::is_none")]
302 pub status: Option<String>,
303}
304
305#[derive(Debug, Clone, Serialize, Deserialize)]
307#[serde(rename_all = "camelCase")]
308pub struct VpcPeering {
309 #[serde(rename = "vpcPeeringId", skip_serializing_if = "Option::is_none")]
311 pub id: Option<i32>,
312
313 #[serde(skip_serializing_if = "Option::is_none")]
315 pub status: Option<String>,
316
317 #[serde(skip_serializing_if = "Option::is_none")]
319 pub aws_account_id: Option<String>,
320
321 #[serde(rename = "awsPeeringUid", skip_serializing_if = "Option::is_none")]
323 pub aws_peering_id: Option<String>,
324
325 #[serde(rename = "vpcUid", skip_serializing_if = "Option::is_none")]
327 pub vpc_id: Option<String>,
328
329 #[serde(skip_serializing_if = "Option::is_none")]
331 pub vpc_cidr: Option<String>,
332
333 #[serde(skip_serializing_if = "Option::is_none")]
335 pub vpc_cidrs: Option<Vec<VpcCidr>>,
336
337 #[serde(rename = "projectUid", skip_serializing_if = "Option::is_none")]
339 pub gcp_project_uid: Option<String>,
340
341 #[serde(skip_serializing_if = "Option::is_none")]
343 pub network_name: Option<String>,
344
345 #[serde(skip_serializing_if = "Option::is_none")]
347 pub redis_project_uid: Option<String>,
348
349 #[serde(skip_serializing_if = "Option::is_none")]
351 pub redis_network_name: Option<String>,
352
353 #[serde(skip_serializing_if = "Option::is_none")]
355 pub cloud_peering_id: Option<String>,
356
357 #[serde(rename = "regionName", skip_serializing_if = "Option::is_none")]
359 pub region: Option<String>,
360
361 #[serde(skip_serializing_if = "Option::is_none")]
363 pub provider: Option<String>,
364}
365
366#[derive(Debug, Clone, Serialize, Deserialize)]
368#[serde(rename_all = "camelCase")]
369pub struct ActiveActiveVpcPeering {
370 #[serde(skip_serializing_if = "Option::is_none")]
372 pub id: Option<i32>,
373
374 #[serde(skip_serializing_if = "Option::is_none")]
376 pub status: Option<String>,
377
378 #[serde(skip_serializing_if = "Option::is_none")]
380 pub region_id: Option<i32>,
381
382 #[serde(skip_serializing_if = "Option::is_none")]
384 pub region_name: Option<String>,
385
386 #[serde(skip_serializing_if = "Option::is_none")]
388 pub aws_account_id: Option<String>,
389
390 #[serde(rename = "awsPeeringUid", skip_serializing_if = "Option::is_none")]
392 pub aws_peering_id: Option<String>,
393
394 #[serde(rename = "vpcUid", skip_serializing_if = "Option::is_none")]
396 pub vpc_id: Option<String>,
397
398 #[serde(skip_serializing_if = "Option::is_none")]
400 pub vpc_cidr: Option<String>,
401
402 #[serde(skip_serializing_if = "Option::is_none")]
404 pub vpc_cidrs: Option<Vec<VpcCidr>>,
405
406 #[serde(rename = "vpcProjectUid", skip_serializing_if = "Option::is_none")]
408 pub gcp_project_uid: Option<String>,
409
410 #[serde(rename = "vpcNetworkName", skip_serializing_if = "Option::is_none")]
412 pub network_name: Option<String>,
413
414 #[serde(skip_serializing_if = "Option::is_none")]
416 pub redis_project_uid: Option<String>,
417
418 #[serde(skip_serializing_if = "Option::is_none")]
420 pub redis_network_name: Option<String>,
421
422 #[serde(skip_serializing_if = "Option::is_none")]
424 pub cloud_peering_id: Option<String>,
425
426 #[serde(skip_serializing_if = "Option::is_none")]
428 pub source_region: Option<String>,
429
430 #[serde(skip_serializing_if = "Option::is_none")]
432 pub destination_region: Option<String>,
433}
434
435#[derive(Debug, Clone, Serialize, Deserialize)]
437#[serde(rename_all = "camelCase")]
438pub struct ActiveActiveVpcRegion {
439 #[serde(skip_serializing_if = "Option::is_none")]
441 pub id: Option<i32>,
442
443 #[serde(rename = "region", skip_serializing_if = "Option::is_none")]
445 pub source_region: Option<String>,
446
447 #[serde(skip_serializing_if = "Option::is_none")]
449 pub vpc_peerings: Option<Vec<ActiveActiveVpcPeering>>,
450}
451
452#[derive(Debug, Clone, Serialize, Deserialize)]
454#[serde(rename_all = "camelCase")]
455pub struct ActiveActiveVpcPeeringList {
456 #[serde(skip_serializing_if = "Option::is_none")]
458 pub subscription_id: Option<i32>,
459
460 #[serde(skip_serializing_if = "Option::is_none")]
462 pub regions: Option<Vec<ActiveActiveVpcRegion>>,
463}
464
465pub struct VpcPeeringHandler {
467 client: CloudClient,
468}
469
470impl VpcPeeringHandler {
471 #[must_use]
473 pub fn new(client: CloudClient) -> Self {
474 Self { client }
475 }
476
477 pub async fn get(&self, subscription_id: i32) -> Result<TaskStateUpdate> {
483 self.client
484 .get(&format!("/subscriptions/{subscription_id}/peerings"))
485 .await
486 }
487
488 pub async fn create(
490 &self,
491 subscription_id: i32,
492 request: &VpcPeeringCreateRequest,
493 ) -> Result<TaskStateUpdate> {
494 self.client
495 .post(
496 &format!("/subscriptions/{subscription_id}/peerings"),
497 request,
498 )
499 .await
500 }
501
502 pub async fn delete(&self, subscription_id: i32, peering_id: i32) -> Result<TaskStateUpdate> {
504 self.client
505 .delete_typed(&format!(
506 "/subscriptions/{subscription_id}/peerings/{peering_id}"
507 ))
508 .await
509 }
510
511 pub async fn update(
513 &self,
514 subscription_id: i32,
515 peering_id: i32,
516 request: &VpcPeeringCreateRequest,
517 ) -> Result<TaskStateUpdate> {
518 self.client
519 .put(
520 &format!("/subscriptions/{subscription_id}/peerings/{peering_id}"),
521 request,
522 )
523 .await
524 }
525
526 pub async fn get_active_active(&self, subscription_id: i32) -> Result<TaskStateUpdate> {
538 self.client
539 .get(&format!(
540 "/subscriptions/{subscription_id}/regions/peerings"
541 ))
542 .await
543 }
544
545 pub async fn create_active_active(
553 &self,
554 subscription_id: i32,
555 request: &ActiveActiveVpcPeeringCreateRequest,
556 ) -> Result<TaskStateUpdate> {
557 self.client
558 .post(
559 &format!("/subscriptions/{subscription_id}/regions/peerings"),
560 request,
561 )
562 .await
563 }
564
565 pub async fn update_active_active(
569 &self,
570 subscription_id: i32,
571 peering_id: i32,
572 request: &VpcPeeringUpdateAwsRequest,
573 ) -> Result<TaskStateUpdate> {
574 self.client
575 .put(
576 &format!("/subscriptions/{subscription_id}/regions/peerings/{peering_id}"),
577 request,
578 )
579 .await
580 }
581
582 pub async fn delete_active_active(
586 &self,
587 subscription_id: i32,
588 peering_id: i32,
589 ) -> Result<TaskStateUpdate> {
590 self.client
591 .delete_typed(&format!(
592 "/subscriptions/{subscription_id}/regions/peerings/{peering_id}"
593 ))
594 .await
595 }
596}