use crate::{CloudClient, Result};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PscEndpointUpdateRequest {
pub subscription_id: i32,
pub psc_service_id: i32,
pub endpoint_id: i32,
#[serde(skip_serializing_if = "Option::is_none")]
pub gcp_project_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gcp_vpc_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gcp_vpc_subnet_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub endpoint_connection_name: Option<String>,
}
pub use crate::types::TaskStateUpdate;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PrivateServiceConnectService {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub connection_host_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub service_attachment_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PrivateServiceConnectEndpoint {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gcp_project_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gcp_vpc_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub gcp_vpc_subnet_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub endpoint_connection_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PrivateServiceConnectEndpoints {
#[serde(skip_serializing_if = "Option::is_none")]
pub psc_service_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub endpoints: Option<Vec<PrivateServiceConnectEndpoint>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GcpCreationScript {
#[serde(skip_serializing_if = "Option::is_none")]
pub bash: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub powershell: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub terraform_gcp: Option<TerraformGcp>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TerraformGcp {
#[serde(skip_serializing_if = "Option::is_none")]
pub service_attachments: Option<Vec<TerraformGcpServiceAttachment>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TerraformGcpServiceAttachment {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dns_record: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ip_address_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub forwarding_rule_name: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GcpDeletionScript {
#[serde(skip_serializing_if = "Option::is_none")]
pub bash: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub powershell: Option<String>,
}
pub struct PscHandler {
client: CloudClient,
}
impl PscHandler {
#[must_use]
pub fn new(client: CloudClient) -> Self {
Self { client }
}
pub async fn delete_service(&self, subscription_id: i32) -> Result<serde_json::Value> {
self.client
.delete(&format!(
"/subscriptions/{subscription_id}/private-service-connect"
))
.await?;
Ok(serde_json::Value::Null)
}
pub async fn get_service(&self, subscription_id: i32) -> Result<TaskStateUpdate> {
self.client
.get(&format!(
"/subscriptions/{subscription_id}/private-service-connect"
))
.await
}
pub async fn create_service(&self, subscription_id: i32) -> Result<TaskStateUpdate> {
self.client
.post(
&format!("/subscriptions/{subscription_id}/private-service-connect"),
&serde_json::json!({}),
)
.await
}
pub async fn get_endpoints(&self, subscription_id: i32) -> Result<TaskStateUpdate> {
self.client
.get(&format!(
"/subscriptions/{subscription_id}/private-service-connect/endpoints"
))
.await
}
pub async fn create_endpoint(
&self,
subscription_id: i32,
request: &PscEndpointUpdateRequest,
) -> Result<TaskStateUpdate> {
self.client
.post(
&format!("/subscriptions/{subscription_id}/private-service-connect/endpoints"),
request,
)
.await
}
pub async fn delete_endpoint(
&self,
subscription_id: i32,
endpoint_id: i32,
) -> Result<serde_json::Value> {
self.client
.delete(&format!(
"/subscriptions/{subscription_id}/private-service-connect/endpoints/{endpoint_id}"
))
.await?;
Ok(serde_json::Value::Null)
}
pub async fn update_endpoint(
&self,
subscription_id: i32,
endpoint_id: i32,
request: &PscEndpointUpdateRequest,
) -> Result<TaskStateUpdate> {
let psc_service_id = request.psc_service_id;
self.client
.put(
&format!(
"/subscriptions/{subscription_id}/private-service-connect/{psc_service_id}/endpoints/{endpoint_id}"
),
request,
)
.await
}
pub async fn get_endpoint_creation_script(
&self,
subscription_id: i32,
endpoint_id: i32,
) -> Result<String> {
self.client
.get(&format!(
"/subscriptions/{subscription_id}/private-service-connect/endpoints/{endpoint_id}/creationScripts"
))
.await
}
pub async fn get_endpoint_deletion_script(
&self,
subscription_id: i32,
endpoint_id: i32,
) -> Result<String> {
self.client
.get(&format!(
"/subscriptions/{subscription_id}/private-service-connect/endpoints/{endpoint_id}/deletionScripts"
))
.await
}
pub async fn delete_service_active_active(
&self,
subscription_id: i32,
) -> Result<serde_json::Value> {
self.client
.delete(&format!(
"/subscriptions/{subscription_id}/regions/private-service-connect"
))
.await?;
Ok(serde_json::Value::Null)
}
pub async fn get_service_active_active(&self, subscription_id: i32) -> Result<TaskStateUpdate> {
self.client
.get(&format!(
"/subscriptions/{subscription_id}/regions/private-service-connect"
))
.await
}
pub async fn create_service_active_active(
&self,
subscription_id: i32,
) -> Result<TaskStateUpdate> {
self.client
.post(
&format!("/subscriptions/{subscription_id}/regions/private-service-connect"),
&serde_json::json!({}),
)
.await
}
pub async fn get_endpoints_active_active(
&self,
subscription_id: i32,
) -> Result<TaskStateUpdate> {
self.client
.get(&format!(
"/subscriptions/{subscription_id}/regions/private-service-connect/endpoints"
))
.await
}
pub async fn create_endpoint_active_active(
&self,
subscription_id: i32,
request: &PscEndpointUpdateRequest,
) -> Result<TaskStateUpdate> {
self.client
.post(
&format!(
"/subscriptions/{subscription_id}/regions/private-service-connect/endpoints"
),
request,
)
.await
}
pub async fn delete_endpoint_active_active(
&self,
subscription_id: i32,
region_id: i32,
endpoint_id: i32,
) -> Result<serde_json::Value> {
self.client
.delete(&format!(
"/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect/endpoints/{endpoint_id}"
))
.await?;
Ok(serde_json::Value::Null)
}
pub async fn update_endpoint_active_active(
&self,
subscription_id: i32,
region_id: i32,
endpoint_id: i32,
request: &PscEndpointUpdateRequest,
) -> Result<TaskStateUpdate> {
self.client
.put(
&format!(
"/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect/{subscription_id}/endpoints/{endpoint_id}"
),
request,
)
.await
}
pub async fn get_endpoint_creation_script_active_active(
&self,
subscription_id: i32,
region_id: i32,
psc_service_id: i32,
endpoint_id: i32,
) -> Result<String> {
self.client
.get(&format!(
"/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect/{psc_service_id}/endpoints/{endpoint_id}/creationScripts"
))
.await
}
pub async fn get_endpoint_deletion_script_active_active(
&self,
subscription_id: i32,
region_id: i32,
psc_service_id: i32,
endpoint_id: i32,
) -> Result<String> {
self.client
.get(&format!(
"/subscriptions/{subscription_id}/regions/{region_id}/private-service-connect/{psc_service_id}/endpoints/{endpoint_id}/deletionScripts"
))
.await
}
}