pub mod private_link;
pub mod psc;
pub mod transit_gateway;
pub mod vpc_peering;
pub use private_link::PrivateLinkHandler;
pub use private_link::{
PrincipalType, PrivateLinkAddPrincipalRequest, PrivateLinkCreateRequest,
PrivateLinkRemovePrincipalRequest,
};
pub use psc::PscHandler;
pub use transit_gateway::TransitGatewayHandler;
pub use vpc_peering::VpcPeeringHandler;
pub use psc::PscEndpointUpdateRequest;
pub use transit_gateway::{Cidr, TgwAttachmentRequest, TgwUpdateCidrsRequest};
pub use vpc_peering::{
ActiveActiveVpcPeering, ActiveActiveVpcPeeringList, ActiveActiveVpcRegion, VpcCidr, VpcPeering,
VpcPeeringCreateBaseRequest, VpcPeeringCreateRequest, VpcPeeringUpdateAwsRequest,
VpcPeeringUpdateRequest,
};
use crate::CloudClient;
pub struct ConnectivityHandler {
pub vpc_peering: VpcPeeringHandler,
pub psc: PscHandler,
pub transit_gateway: TransitGatewayHandler,
}
impl ConnectivityHandler {
#[must_use]
pub fn new(client: CloudClient) -> Self {
Self {
vpc_peering: VpcPeeringHandler::new(client.clone()),
psc: PscHandler::new(client.clone()),
transit_gateway: TransitGatewayHandler::new(client),
}
}
pub async fn get_vpc_peering(
&self,
subscription_id: i32,
) -> crate::Result<crate::types::TaskStateUpdate> {
self.vpc_peering.get(subscription_id).await
}
pub async fn create_vpc_peering(
&self,
subscription_id: i32,
request: &VpcPeeringCreateRequest,
) -> crate::Result<crate::types::TaskStateUpdate> {
self.vpc_peering.create(subscription_id, request).await
}
pub async fn delete_vpc_peering(
&self,
subscription_id: i32,
peering_id: i32,
) -> crate::Result<serde_json::Value> {
self.vpc_peering.delete(subscription_id, peering_id).await
}
pub async fn update_vpc_peering(
&self,
subscription_id: i32,
peering_id: i32,
request: &VpcPeeringUpdateAwsRequest,
) -> crate::Result<crate::types::TaskStateUpdate> {
let create_request = VpcPeeringCreateRequest {
provider: None,
command_type: request.command_type.clone(),
vpc_cidr: request.vpc_cidr.clone(),
vpc_cidrs: request.vpc_cidrs.clone(),
..Default::default()
};
self.vpc_peering
.update(subscription_id, peering_id, &create_request)
.await
}
pub async fn get_psc_service(
&self,
subscription_id: i32,
) -> crate::Result<crate::types::TaskStateUpdate> {
self.psc.get_service(subscription_id).await
}
pub async fn create_psc_service(
&self,
subscription_id: i32,
) -> crate::Result<crate::types::TaskStateUpdate> {
self.psc.create_service(subscription_id).await
}
pub async fn delete_psc_service(
&self,
subscription_id: i32,
) -> crate::Result<serde_json::Value> {
self.psc.delete_service(subscription_id).await
}
pub async fn create_psc_endpoint(
&self,
subscription_id: i32,
request: &PscEndpointUpdateRequest,
) -> crate::Result<crate::types::TaskStateUpdate> {
self.psc.create_endpoint(subscription_id, request).await
}
pub async fn get_tgws(
&self,
subscription_id: i32,
) -> crate::Result<crate::types::TaskStateUpdate> {
self.transit_gateway.get_attachments(subscription_id).await
}
pub async fn create_tgw_attachment(
&self,
subscription_id: i32,
tgw_id: &str,
) -> crate::Result<crate::types::TaskStateUpdate> {
self.transit_gateway
.create_attachment_with_id(subscription_id, tgw_id)
.await
}
pub async fn delete_tgw_attachment(
&self,
subscription_id: i32,
attachment_id: i32,
) -> crate::Result<serde_json::Value> {
self.transit_gateway
.delete_attachment(subscription_id, attachment_id.to_string())
.await
}
pub async fn update_tgw_cidrs(
&self,
subscription_id: i32,
attachment_id: &str,
request: &TgwUpdateCidrsRequest,
) -> crate::Result<crate::types::TaskStateUpdate> {
let attachment_request = TgwAttachmentRequest {
aws_account_id: None,
tgw_id: None,
cidrs: request.cidrs.as_ref().map(|cidrs| {
cidrs
.iter()
.filter_map(|c| c.cidr_address.clone())
.collect()
}),
};
self.transit_gateway
.update_attachment_cidrs(
subscription_id,
attachment_id.to_string(),
&attachment_request,
)
.await
}
pub async fn update_psc_service_endpoint(
&self,
subscription_id: i32,
endpoint_id: i32,
request: &PscEndpointUpdateRequest,
) -> crate::Result<crate::types::TaskStateUpdate> {
self.psc
.update_endpoint(subscription_id, endpoint_id, request)
.await
}
pub async fn update_tgw_attachment_cidrs(
&self,
subscription_id: i32,
attachment_id: &str,
request: &TgwUpdateCidrsRequest,
) -> crate::Result<crate::types::TaskStateUpdate> {
self.update_tgw_cidrs(subscription_id, attachment_id, request)
.await
}
}