redis_cloud/connectivity/
mod.rs1pub mod private_link;
23pub mod psc;
24pub mod transit_gateway;
25pub mod vpc_peering;
26
27pub use private_link::PrivateLinkHandler;
29
30pub use private_link::{
32 PrincipalType, PrivateLinkAddPrincipalRequest, PrivateLinkCreateRequest,
33 PrivateLinkRemovePrincipalRequest,
34};
35pub use psc::PscHandler;
36pub use transit_gateway::TransitGatewayHandler;
37pub use vpc_peering::VpcPeeringHandler;
38
39pub use psc::PscEndpointUpdateRequest;
41pub use transit_gateway::{Cidr, TgwAttachmentRequest, TgwUpdateCidrsRequest};
42pub use vpc_peering::{
43 ActiveActiveVpcPeering, ActiveActiveVpcPeeringList, ActiveActiveVpcRegion, VpcCidr, VpcPeering,
44 VpcPeeringCreateBaseRequest, VpcPeeringCreateRequest, VpcPeeringUpdateAwsRequest,
45 VpcPeeringUpdateRequest,
46};
47
48use crate::CloudClient;
50
51pub struct ConnectivityHandler {
58 pub vpc_peering: VpcPeeringHandler,
59 pub psc: PscHandler,
60 pub transit_gateway: TransitGatewayHandler,
61}
62
63impl ConnectivityHandler {
64 #[must_use]
65 pub fn new(client: CloudClient) -> Self {
66 Self {
67 vpc_peering: VpcPeeringHandler::new(client.clone()),
68 psc: PscHandler::new(client.clone()),
69 transit_gateway: TransitGatewayHandler::new(client),
70 }
71 }
72
73 pub async fn get_vpc_peering(
75 &self,
76 subscription_id: i32,
77 ) -> crate::Result<crate::types::TaskStateUpdate> {
78 self.vpc_peering.get(subscription_id).await
79 }
80
81 pub async fn create_vpc_peering(
82 &self,
83 subscription_id: i32,
84 request: &VpcPeeringCreateRequest,
85 ) -> crate::Result<crate::types::TaskStateUpdate> {
86 self.vpc_peering.create(subscription_id, request).await
87 }
88
89 pub async fn delete_vpc_peering(
90 &self,
91 subscription_id: i32,
92 peering_id: i32,
93 ) -> crate::Result<serde_json::Value> {
94 self.vpc_peering.delete(subscription_id, peering_id).await
95 }
96
97 pub async fn update_vpc_peering(
98 &self,
99 subscription_id: i32,
100 peering_id: i32,
101 request: &VpcPeeringUpdateAwsRequest,
102 ) -> crate::Result<crate::types::TaskStateUpdate> {
103 let create_request = VpcPeeringCreateRequest {
105 provider: None,
106 command_type: request.command_type.clone(),
107 vpc_cidr: request.vpc_cidr.clone(),
108 vpc_cidrs: request.vpc_cidrs.clone(),
109 ..Default::default()
110 };
111 self.vpc_peering
112 .update(subscription_id, peering_id, &create_request)
113 .await
114 }
115
116 pub async fn get_psc_service(
118 &self,
119 subscription_id: i32,
120 ) -> crate::Result<crate::types::TaskStateUpdate> {
121 self.psc.get_service(subscription_id).await
122 }
123
124 pub async fn create_psc_service(
125 &self,
126 subscription_id: i32,
127 ) -> crate::Result<crate::types::TaskStateUpdate> {
128 self.psc.create_service(subscription_id).await
129 }
130
131 pub async fn delete_psc_service(
132 &self,
133 subscription_id: i32,
134 ) -> crate::Result<serde_json::Value> {
135 self.psc.delete_service(subscription_id).await
136 }
137
138 pub async fn create_psc_endpoint(
139 &self,
140 subscription_id: i32,
141 request: &PscEndpointUpdateRequest,
142 ) -> crate::Result<crate::types::TaskStateUpdate> {
143 self.psc.create_endpoint(subscription_id, request).await
144 }
145
146 pub async fn get_tgws(
148 &self,
149 subscription_id: i32,
150 ) -> crate::Result<crate::types::TaskStateUpdate> {
151 self.transit_gateway.get_attachments(subscription_id).await
152 }
153
154 pub async fn create_tgw_attachment(
155 &self,
156 subscription_id: i32,
157 tgw_id: &str,
158 ) -> crate::Result<crate::types::TaskStateUpdate> {
159 self.transit_gateway
160 .create_attachment_with_id(subscription_id, tgw_id)
161 .await
162 }
163
164 pub async fn delete_tgw_attachment(
165 &self,
166 subscription_id: i32,
167 attachment_id: i32,
168 ) -> crate::Result<serde_json::Value> {
169 self.transit_gateway
170 .delete_attachment(subscription_id, attachment_id.to_string())
171 .await
172 }
173
174 pub async fn update_tgw_cidrs(
175 &self,
176 subscription_id: i32,
177 attachment_id: &str,
178 request: &TgwUpdateCidrsRequest,
179 ) -> crate::Result<crate::types::TaskStateUpdate> {
180 let attachment_request = TgwAttachmentRequest {
182 aws_account_id: None,
183 tgw_id: None,
184 cidrs: request.cidrs.as_ref().map(|cidrs| {
185 cidrs
186 .iter()
187 .filter_map(|c| c.cidr_address.clone())
188 .collect()
189 }),
190 };
191 self.transit_gateway
192 .update_attachment_cidrs(
193 subscription_id,
194 attachment_id.to_string(),
195 &attachment_request,
196 )
197 .await
198 }
199
200 pub async fn update_psc_service_endpoint(
202 &self,
203 subscription_id: i32,
204 endpoint_id: i32,
205 request: &PscEndpointUpdateRequest,
206 ) -> crate::Result<crate::types::TaskStateUpdate> {
207 self.psc
208 .update_endpoint(subscription_id, endpoint_id, request)
209 .await
210 }
211
212 pub async fn update_tgw_attachment_cidrs(
213 &self,
214 subscription_id: i32,
215 attachment_id: &str,
216 request: &TgwUpdateCidrsRequest,
217 ) -> crate::Result<crate::types::TaskStateUpdate> {
218 self.update_tgw_cidrs(subscription_id, attachment_id, request)
219 .await
220 }
221}