use crate::{CloudClient, Result};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VpcPeeringCreateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub command_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vpc_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aws_region: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aws_account_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vpc_cidr: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vpc_cidrs: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gcp_project_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub network_name: Option<String>,
}
pub type VpcPeeringCreateBaseRequest = VpcPeeringCreateRequest;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VpcPeeringUpdateAwsRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub subscription_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vpc_peering_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vpc_cidr: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vpc_cidrs: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub command_type: Option<String>,
}
pub type VpcPeeringUpdateRequest = VpcPeeringUpdateAwsRequest;
pub use crate::types::TaskStateUpdate;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VpcCidr {
#[serde(skip_serializing_if = "Option::is_none")]
pub vpc_cidr: Option<String>,
#[serde(rename = "active", skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VpcPeering {
#[serde(rename = "vpcPeeringId", skip_serializing_if = "Option::is_none")]
pub id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aws_account_id: Option<String>,
#[serde(rename = "awsPeeringUid", skip_serializing_if = "Option::is_none")]
pub aws_peering_id: Option<String>,
#[serde(rename = "vpcUid", skip_serializing_if = "Option::is_none")]
pub vpc_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vpc_cidr: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vpc_cidrs: Option<Vec<VpcCidr>>,
#[serde(rename = "projectUid", skip_serializing_if = "Option::is_none")]
pub gcp_project_uid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub network_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redis_project_uid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redis_network_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cloud_peering_id: Option<String>,
#[serde(rename = "regionName", skip_serializing_if = "Option::is_none")]
pub region: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ActiveActiveVpcPeering {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub region_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub region_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aws_account_id: Option<String>,
#[serde(rename = "awsPeeringUid", skip_serializing_if = "Option::is_none")]
pub aws_peering_id: Option<String>,
#[serde(rename = "vpcUid", skip_serializing_if = "Option::is_none")]
pub vpc_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vpc_cidr: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vpc_cidrs: Option<Vec<VpcCidr>>,
#[serde(rename = "vpcProjectUid", skip_serializing_if = "Option::is_none")]
pub gcp_project_uid: Option<String>,
#[serde(rename = "vpcNetworkName", skip_serializing_if = "Option::is_none")]
pub network_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redis_project_uid: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redis_network_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cloud_peering_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_region: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub destination_region: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ActiveActiveVpcRegion {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<i32>,
#[serde(rename = "region", skip_serializing_if = "Option::is_none")]
pub source_region: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub vpc_peerings: Option<Vec<ActiveActiveVpcPeering>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ActiveActiveVpcPeeringList {
#[serde(skip_serializing_if = "Option::is_none")]
pub subscription_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub regions: Option<Vec<ActiveActiveVpcRegion>>,
}
pub struct VpcPeeringHandler {
client: CloudClient,
}
impl VpcPeeringHandler {
#[must_use]
pub fn new(client: CloudClient) -> Self {
Self { client }
}
pub async fn get(&self, subscription_id: i32) -> Result<TaskStateUpdate> {
self.client
.get(&format!("/subscriptions/{subscription_id}/peerings"))
.await
}
pub async fn create(
&self,
subscription_id: i32,
request: &VpcPeeringCreateRequest,
) -> Result<TaskStateUpdate> {
self.client
.post(
&format!("/subscriptions/{subscription_id}/peerings"),
request,
)
.await
}
pub async fn delete(&self, subscription_id: i32, peering_id: i32) -> Result<serde_json::Value> {
self.client
.delete(&format!(
"/subscriptions/{subscription_id}/peerings/{peering_id}"
))
.await?;
Ok(serde_json::Value::Null)
}
pub async fn update(
&self,
subscription_id: i32,
peering_id: i32,
request: &VpcPeeringCreateRequest,
) -> Result<TaskStateUpdate> {
self.client
.put(
&format!("/subscriptions/{subscription_id}/peerings/{peering_id}"),
request,
)
.await
}
pub async fn get_active_active(&self, subscription_id: i32) -> Result<TaskStateUpdate> {
self.get(subscription_id).await
}
pub async fn create_active_active(
&self,
subscription_id: i32,
request: &VpcPeeringCreateRequest,
) -> Result<TaskStateUpdate> {
self.create(subscription_id, request).await
}
pub async fn delete_active_active(
&self,
subscription_id: i32,
peering_id: i32,
) -> Result<serde_json::Value> {
self.delete(subscription_id, peering_id).await
}
pub async fn update_active_active(
&self,
subscription_id: i32,
peering_id: i32,
request: &VpcPeeringCreateRequest,
) -> Result<TaskStateUpdate> {
self.update(subscription_id, peering_id, request).await
}
}