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;
29pub use psc::PscHandler;
30pub use transit_gateway::TransitGatewayHandler;
31pub use vpc_peering::VpcPeeringHandler;
32
33pub use psc::PscEndpointUpdateRequest;
35pub use transit_gateway::{Cidr, TgwAttachmentRequest, TgwUpdateCidrsRequest};
36pub use vpc_peering::{
37 VpcPeeringCreateBaseRequest, VpcPeeringCreateRequest, VpcPeeringUpdateAwsRequest,
38 VpcPeeringUpdateRequest,
39};
40
41use crate::CloudClient;
43
44pub struct ConnectivityHandler {
51 pub vpc_peering: VpcPeeringHandler,
52 pub psc: PscHandler,
53 pub transit_gateway: TransitGatewayHandler,
54}
55
56impl ConnectivityHandler {
57 pub fn new(client: CloudClient) -> Self {
58 Self {
59 vpc_peering: VpcPeeringHandler::new(client.clone()),
60 psc: PscHandler::new(client.clone()),
61 transit_gateway: TransitGatewayHandler::new(client),
62 }
63 }
64
65 pub async fn get_vpc_peering(
67 &self,
68 subscription_id: i32,
69 ) -> crate::Result<crate::types::TaskStateUpdate> {
70 self.vpc_peering.get(subscription_id).await
71 }
72
73 pub async fn create_vpc_peering(
74 &self,
75 subscription_id: i32,
76 request: &VpcPeeringCreateRequest,
77 ) -> crate::Result<crate::types::TaskStateUpdate> {
78 self.vpc_peering.create(subscription_id, request).await
79 }
80
81 pub async fn delete_vpc_peering(
82 &self,
83 subscription_id: i32,
84 peering_id: i32,
85 ) -> crate::Result<serde_json::Value> {
86 self.vpc_peering.delete(subscription_id, peering_id).await
87 }
88
89 pub async fn update_vpc_peering(
90 &self,
91 subscription_id: i32,
92 peering_id: i32,
93 request: &VpcPeeringUpdateAwsRequest,
94 ) -> crate::Result<crate::types::TaskStateUpdate> {
95 let create_request = VpcPeeringCreateRequest {
97 provider: None,
98 command_type: None,
99 extra: serde_json::json!(request),
100 };
101 self.vpc_peering
102 .update(subscription_id, peering_id, &create_request)
103 .await
104 }
105
106 pub async fn get_psc_service(
108 &self,
109 subscription_id: i32,
110 ) -> crate::Result<crate::types::TaskStateUpdate> {
111 self.psc.get_service(subscription_id).await
112 }
113
114 pub async fn create_psc_service(
115 &self,
116 subscription_id: i32,
117 ) -> crate::Result<crate::types::TaskStateUpdate> {
118 self.psc.create_service(subscription_id).await
119 }
120
121 pub async fn delete_psc_service(
122 &self,
123 subscription_id: i32,
124 ) -> crate::Result<serde_json::Value> {
125 self.psc.delete_service(subscription_id).await
126 }
127
128 pub async fn create_psc_endpoint(
129 &self,
130 subscription_id: i32,
131 request: &PscEndpointUpdateRequest,
132 ) -> crate::Result<crate::types::TaskStateUpdate> {
133 self.psc.create_endpoint(subscription_id, request).await
134 }
135
136 pub async fn get_tgws(
138 &self,
139 subscription_id: i32,
140 ) -> crate::Result<crate::types::TaskStateUpdate> {
141 self.transit_gateway.get_attachments(subscription_id).await
142 }
143
144 pub async fn create_tgw_attachment(
145 &self,
146 subscription_id: i32,
147 tgw_id: &str,
148 ) -> crate::Result<crate::types::TaskStateUpdate> {
149 self.transit_gateway
150 .create_attachment_with_id(subscription_id, tgw_id)
151 .await
152 }
153
154 pub async fn delete_tgw_attachment(
155 &self,
156 subscription_id: i32,
157 attachment_id: i32,
158 ) -> crate::Result<serde_json::Value> {
159 self.transit_gateway
160 .delete_attachment(subscription_id, attachment_id.to_string())
161 .await
162 }
163
164 pub async fn update_tgw_cidrs(
165 &self,
166 subscription_id: i32,
167 attachment_id: &str,
168 request: &TgwUpdateCidrsRequest,
169 ) -> crate::Result<crate::types::TaskStateUpdate> {
170 let attachment_request = TgwAttachmentRequest {
172 aws_account_id: None,
173 tgw_id: None,
174 cidrs: request.cidrs.as_ref().map(|cidrs| {
175 cidrs
176 .iter()
177 .filter_map(|c| c.cidr_address.clone())
178 .collect()
179 }),
180 extra: serde_json::Value::Object(serde_json::Map::new()),
181 };
182 self.transit_gateway
183 .update_attachment_cidrs(
184 subscription_id,
185 attachment_id.to_string(),
186 &attachment_request,
187 )
188 .await
189 }
190
191 pub async fn update_psc_service_endpoint(
193 &self,
194 subscription_id: i32,
195 endpoint_id: i32,
196 request: &PscEndpointUpdateRequest,
197 ) -> crate::Result<crate::types::TaskStateUpdate> {
198 self.psc
199 .update_endpoint(subscription_id, endpoint_id, request)
200 .await
201 }
202
203 pub async fn update_tgw_attachment_cidrs(
204 &self,
205 subscription_id: i32,
206 attachment_id: &str,
207 request: &TgwUpdateCidrsRequest,
208 ) -> crate::Result<crate::types::TaskStateUpdate> {
209 self.update_tgw_cidrs(subscription_id, attachment_id, request)
210 .await
211 }
212}