1use std::error::Error;
14use std::fmt;
15
16use async_trait::async_trait;
17use rusoto_core::credential::ProvideAwsCredentials;
18use rusoto_core::region;
19use rusoto_core::request::{BufferedHttpResponse, DispatchSignedRequest};
20use rusoto_core::{Client, RusotoError};
21
22use rusoto_core::param::{Params, ServiceParams};
23use rusoto_core::proto;
24use rusoto_core::signature::SignedRequest;
25#[allow(unused_imports)]
26use serde::{Deserialize, Serialize};
27use serde_json;
28#[derive(Clone, Debug, Default, PartialEq, Serialize)]
29#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
30pub struct CreateOutpostInput {
31 #[serde(rename = "AvailabilityZone")]
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub availability_zone: Option<String>,
34 #[serde(rename = "AvailabilityZoneId")]
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub availability_zone_id: Option<String>,
37 #[serde(rename = "Description")]
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub description: Option<String>,
40 #[serde(rename = "Name")]
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub name: Option<String>,
43 #[serde(rename = "SiteId")]
44 pub site_id: String,
45}
46
47#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
48#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
49pub struct CreateOutpostOutput {
50 #[serde(rename = "Outpost")]
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub outpost: Option<Outpost>,
53}
54
55#[derive(Clone, Debug, Default, PartialEq, Serialize)]
56#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
57pub struct DeleteOutpostInput {
58 #[serde(rename = "OutpostId")]
59 pub outpost_id: String,
60}
61
62#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
63#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
64pub struct DeleteOutpostOutput {}
65
66#[derive(Clone, Debug, Default, PartialEq, Serialize)]
67#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
68pub struct DeleteSiteInput {
69 #[serde(rename = "SiteId")]
70 pub site_id: String,
71}
72
73#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
74#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
75pub struct DeleteSiteOutput {}
76
77#[derive(Clone, Debug, Default, PartialEq, Serialize)]
78#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
79pub struct GetOutpostInput {
80 #[serde(rename = "OutpostId")]
81 pub outpost_id: String,
82}
83
84#[derive(Clone, Debug, Default, PartialEq, Serialize)]
85#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
86pub struct GetOutpostInstanceTypesInput {
87 #[serde(rename = "MaxResults")]
88 #[serde(skip_serializing_if = "Option::is_none")]
89 pub max_results: Option<i64>,
90 #[serde(rename = "NextToken")]
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub next_token: Option<String>,
93 #[serde(rename = "OutpostId")]
94 pub outpost_id: String,
95}
96
97#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
98#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
99pub struct GetOutpostInstanceTypesOutput {
100 #[serde(rename = "InstanceTypes")]
101 #[serde(skip_serializing_if = "Option::is_none")]
102 pub instance_types: Option<Vec<InstanceTypeItem>>,
103 #[serde(rename = "NextToken")]
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub next_token: Option<String>,
106 #[serde(rename = "OutpostArn")]
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub outpost_arn: Option<String>,
109 #[serde(rename = "OutpostId")]
110 #[serde(skip_serializing_if = "Option::is_none")]
111 pub outpost_id: Option<String>,
112}
113
114#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
115#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
116pub struct GetOutpostOutput {
117 #[serde(rename = "Outpost")]
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub outpost: Option<Outpost>,
120}
121
122#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
124#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
125pub struct InstanceTypeItem {
126 #[serde(rename = "InstanceType")]
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub instance_type: Option<String>,
129}
130
131#[derive(Clone, Debug, Default, PartialEq, Serialize)]
132#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
133pub struct ListOutpostsInput {
134 #[serde(rename = "MaxResults")]
135 #[serde(skip_serializing_if = "Option::is_none")]
136 pub max_results: Option<i64>,
137 #[serde(rename = "NextToken")]
138 #[serde(skip_serializing_if = "Option::is_none")]
139 pub next_token: Option<String>,
140}
141
142#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
143#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
144pub struct ListOutpostsOutput {
145 #[serde(rename = "NextToken")]
146 #[serde(skip_serializing_if = "Option::is_none")]
147 pub next_token: Option<String>,
148 #[serde(rename = "Outposts")]
149 #[serde(skip_serializing_if = "Option::is_none")]
150 pub outposts: Option<Vec<Outpost>>,
151}
152
153#[derive(Clone, Debug, Default, PartialEq, Serialize)]
154#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
155pub struct ListSitesInput {
156 #[serde(rename = "MaxResults")]
157 #[serde(skip_serializing_if = "Option::is_none")]
158 pub max_results: Option<i64>,
159 #[serde(rename = "NextToken")]
160 #[serde(skip_serializing_if = "Option::is_none")]
161 pub next_token: Option<String>,
162}
163
164#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
165#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
166pub struct ListSitesOutput {
167 #[serde(rename = "NextToken")]
168 #[serde(skip_serializing_if = "Option::is_none")]
169 pub next_token: Option<String>,
170 #[serde(rename = "Sites")]
171 #[serde(skip_serializing_if = "Option::is_none")]
172 pub sites: Option<Vec<Site>>,
173}
174
175#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
177#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
178pub struct Outpost {
179 #[serde(rename = "AvailabilityZone")]
180 #[serde(skip_serializing_if = "Option::is_none")]
181 pub availability_zone: Option<String>,
182 #[serde(rename = "AvailabilityZoneId")]
183 #[serde(skip_serializing_if = "Option::is_none")]
184 pub availability_zone_id: Option<String>,
185 #[serde(rename = "Description")]
186 #[serde(skip_serializing_if = "Option::is_none")]
187 pub description: Option<String>,
188 #[serde(rename = "LifeCycleStatus")]
189 #[serde(skip_serializing_if = "Option::is_none")]
190 pub life_cycle_status: Option<String>,
191 #[serde(rename = "Name")]
192 #[serde(skip_serializing_if = "Option::is_none")]
193 pub name: Option<String>,
194 #[serde(rename = "OutpostArn")]
195 #[serde(skip_serializing_if = "Option::is_none")]
196 pub outpost_arn: Option<String>,
197 #[serde(rename = "OutpostId")]
198 #[serde(skip_serializing_if = "Option::is_none")]
199 pub outpost_id: Option<String>,
200 #[serde(rename = "OwnerId")]
201 #[serde(skip_serializing_if = "Option::is_none")]
202 pub owner_id: Option<String>,
203 #[serde(rename = "SiteId")]
204 #[serde(skip_serializing_if = "Option::is_none")]
205 pub site_id: Option<String>,
206}
207
208#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
210#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
211pub struct Site {
212 #[serde(rename = "AccountId")]
213 #[serde(skip_serializing_if = "Option::is_none")]
214 pub account_id: Option<String>,
215 #[serde(rename = "Description")]
216 #[serde(skip_serializing_if = "Option::is_none")]
217 pub description: Option<String>,
218 #[serde(rename = "Name")]
219 #[serde(skip_serializing_if = "Option::is_none")]
220 pub name: Option<String>,
221 #[serde(rename = "SiteId")]
222 #[serde(skip_serializing_if = "Option::is_none")]
223 pub site_id: Option<String>,
224}
225
226#[derive(Debug, PartialEq)]
228pub enum CreateOutpostError {
229 AccessDenied(String),
231 InternalServer(String),
233 NotFound(String),
235 ServiceQuotaExceeded(String),
237}
238
239impl CreateOutpostError {
240 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateOutpostError> {
241 if let Some(err) = proto::json::Error::parse_rest(&res) {
242 match err.typ.as_str() {
243 "AccessDeniedException" => {
244 return RusotoError::Service(CreateOutpostError::AccessDenied(err.msg))
245 }
246 "InternalServerException" => {
247 return RusotoError::Service(CreateOutpostError::InternalServer(err.msg))
248 }
249 "NotFoundException" => {
250 return RusotoError::Service(CreateOutpostError::NotFound(err.msg))
251 }
252 "ServiceQuotaExceededException" => {
253 return RusotoError::Service(CreateOutpostError::ServiceQuotaExceeded(err.msg))
254 }
255 "ValidationException" => return RusotoError::Validation(err.msg),
256 _ => {}
257 }
258 }
259 RusotoError::Unknown(res)
260 }
261}
262impl fmt::Display for CreateOutpostError {
263 #[allow(unused_variables)]
264 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
265 match *self {
266 CreateOutpostError::AccessDenied(ref cause) => write!(f, "{}", cause),
267 CreateOutpostError::InternalServer(ref cause) => write!(f, "{}", cause),
268 CreateOutpostError::NotFound(ref cause) => write!(f, "{}", cause),
269 CreateOutpostError::ServiceQuotaExceeded(ref cause) => write!(f, "{}", cause),
270 }
271 }
272}
273impl Error for CreateOutpostError {}
274#[derive(Debug, PartialEq)]
276pub enum DeleteOutpostError {
277 AccessDenied(String),
279 InternalServer(String),
281 NotFound(String),
283}
284
285impl DeleteOutpostError {
286 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteOutpostError> {
287 if let Some(err) = proto::json::Error::parse_rest(&res) {
288 match err.typ.as_str() {
289 "AccessDeniedException" => {
290 return RusotoError::Service(DeleteOutpostError::AccessDenied(err.msg))
291 }
292 "InternalServerException" => {
293 return RusotoError::Service(DeleteOutpostError::InternalServer(err.msg))
294 }
295 "NotFoundException" => {
296 return RusotoError::Service(DeleteOutpostError::NotFound(err.msg))
297 }
298 "ValidationException" => return RusotoError::Validation(err.msg),
299 _ => {}
300 }
301 }
302 RusotoError::Unknown(res)
303 }
304}
305impl fmt::Display for DeleteOutpostError {
306 #[allow(unused_variables)]
307 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
308 match *self {
309 DeleteOutpostError::AccessDenied(ref cause) => write!(f, "{}", cause),
310 DeleteOutpostError::InternalServer(ref cause) => write!(f, "{}", cause),
311 DeleteOutpostError::NotFound(ref cause) => write!(f, "{}", cause),
312 }
313 }
314}
315impl Error for DeleteOutpostError {}
316#[derive(Debug, PartialEq)]
318pub enum DeleteSiteError {
319 AccessDenied(String),
321 InternalServer(String),
323 NotFound(String),
325}
326
327impl DeleteSiteError {
328 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteSiteError> {
329 if let Some(err) = proto::json::Error::parse_rest(&res) {
330 match err.typ.as_str() {
331 "AccessDeniedException" => {
332 return RusotoError::Service(DeleteSiteError::AccessDenied(err.msg))
333 }
334 "InternalServerException" => {
335 return RusotoError::Service(DeleteSiteError::InternalServer(err.msg))
336 }
337 "NotFoundException" => {
338 return RusotoError::Service(DeleteSiteError::NotFound(err.msg))
339 }
340 "ValidationException" => return RusotoError::Validation(err.msg),
341 _ => {}
342 }
343 }
344 RusotoError::Unknown(res)
345 }
346}
347impl fmt::Display for DeleteSiteError {
348 #[allow(unused_variables)]
349 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
350 match *self {
351 DeleteSiteError::AccessDenied(ref cause) => write!(f, "{}", cause),
352 DeleteSiteError::InternalServer(ref cause) => write!(f, "{}", cause),
353 DeleteSiteError::NotFound(ref cause) => write!(f, "{}", cause),
354 }
355 }
356}
357impl Error for DeleteSiteError {}
358#[derive(Debug, PartialEq)]
360pub enum GetOutpostError {
361 AccessDenied(String),
363 InternalServer(String),
365 NotFound(String),
367}
368
369impl GetOutpostError {
370 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetOutpostError> {
371 if let Some(err) = proto::json::Error::parse_rest(&res) {
372 match err.typ.as_str() {
373 "AccessDeniedException" => {
374 return RusotoError::Service(GetOutpostError::AccessDenied(err.msg))
375 }
376 "InternalServerException" => {
377 return RusotoError::Service(GetOutpostError::InternalServer(err.msg))
378 }
379 "NotFoundException" => {
380 return RusotoError::Service(GetOutpostError::NotFound(err.msg))
381 }
382 "ValidationException" => return RusotoError::Validation(err.msg),
383 _ => {}
384 }
385 }
386 RusotoError::Unknown(res)
387 }
388}
389impl fmt::Display for GetOutpostError {
390 #[allow(unused_variables)]
391 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
392 match *self {
393 GetOutpostError::AccessDenied(ref cause) => write!(f, "{}", cause),
394 GetOutpostError::InternalServer(ref cause) => write!(f, "{}", cause),
395 GetOutpostError::NotFound(ref cause) => write!(f, "{}", cause),
396 }
397 }
398}
399impl Error for GetOutpostError {}
400#[derive(Debug, PartialEq)]
402pub enum GetOutpostInstanceTypesError {
403 AccessDenied(String),
405 InternalServer(String),
407 NotFound(String),
409}
410
411impl GetOutpostInstanceTypesError {
412 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetOutpostInstanceTypesError> {
413 if let Some(err) = proto::json::Error::parse_rest(&res) {
414 match err.typ.as_str() {
415 "AccessDeniedException" => {
416 return RusotoError::Service(GetOutpostInstanceTypesError::AccessDenied(
417 err.msg,
418 ))
419 }
420 "InternalServerException" => {
421 return RusotoError::Service(GetOutpostInstanceTypesError::InternalServer(
422 err.msg,
423 ))
424 }
425 "NotFoundException" => {
426 return RusotoError::Service(GetOutpostInstanceTypesError::NotFound(err.msg))
427 }
428 "ValidationException" => return RusotoError::Validation(err.msg),
429 _ => {}
430 }
431 }
432 RusotoError::Unknown(res)
433 }
434}
435impl fmt::Display for GetOutpostInstanceTypesError {
436 #[allow(unused_variables)]
437 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
438 match *self {
439 GetOutpostInstanceTypesError::AccessDenied(ref cause) => write!(f, "{}", cause),
440 GetOutpostInstanceTypesError::InternalServer(ref cause) => write!(f, "{}", cause),
441 GetOutpostInstanceTypesError::NotFound(ref cause) => write!(f, "{}", cause),
442 }
443 }
444}
445impl Error for GetOutpostInstanceTypesError {}
446#[derive(Debug, PartialEq)]
448pub enum ListOutpostsError {
449 AccessDenied(String),
451 InternalServer(String),
453}
454
455impl ListOutpostsError {
456 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListOutpostsError> {
457 if let Some(err) = proto::json::Error::parse_rest(&res) {
458 match err.typ.as_str() {
459 "AccessDeniedException" => {
460 return RusotoError::Service(ListOutpostsError::AccessDenied(err.msg))
461 }
462 "InternalServerException" => {
463 return RusotoError::Service(ListOutpostsError::InternalServer(err.msg))
464 }
465 "ValidationException" => return RusotoError::Validation(err.msg),
466 _ => {}
467 }
468 }
469 RusotoError::Unknown(res)
470 }
471}
472impl fmt::Display for ListOutpostsError {
473 #[allow(unused_variables)]
474 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
475 match *self {
476 ListOutpostsError::AccessDenied(ref cause) => write!(f, "{}", cause),
477 ListOutpostsError::InternalServer(ref cause) => write!(f, "{}", cause),
478 }
479 }
480}
481impl Error for ListOutpostsError {}
482#[derive(Debug, PartialEq)]
484pub enum ListSitesError {
485 AccessDenied(String),
487 InternalServer(String),
489}
490
491impl ListSitesError {
492 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListSitesError> {
493 if let Some(err) = proto::json::Error::parse_rest(&res) {
494 match err.typ.as_str() {
495 "AccessDeniedException" => {
496 return RusotoError::Service(ListSitesError::AccessDenied(err.msg))
497 }
498 "InternalServerException" => {
499 return RusotoError::Service(ListSitesError::InternalServer(err.msg))
500 }
501 "ValidationException" => return RusotoError::Validation(err.msg),
502 _ => {}
503 }
504 }
505 RusotoError::Unknown(res)
506 }
507}
508impl fmt::Display for ListSitesError {
509 #[allow(unused_variables)]
510 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
511 match *self {
512 ListSitesError::AccessDenied(ref cause) => write!(f, "{}", cause),
513 ListSitesError::InternalServer(ref cause) => write!(f, "{}", cause),
514 }
515 }
516}
517impl Error for ListSitesError {}
518#[async_trait]
520pub trait Outposts {
521 async fn create_outpost(
523 &self,
524 input: CreateOutpostInput,
525 ) -> Result<CreateOutpostOutput, RusotoError<CreateOutpostError>>;
526
527 async fn delete_outpost(
529 &self,
530 input: DeleteOutpostInput,
531 ) -> Result<DeleteOutpostOutput, RusotoError<DeleteOutpostError>>;
532
533 async fn delete_site(
535 &self,
536 input: DeleteSiteInput,
537 ) -> Result<DeleteSiteOutput, RusotoError<DeleteSiteError>>;
538
539 async fn get_outpost(
541 &self,
542 input: GetOutpostInput,
543 ) -> Result<GetOutpostOutput, RusotoError<GetOutpostError>>;
544
545 async fn get_outpost_instance_types(
547 &self,
548 input: GetOutpostInstanceTypesInput,
549 ) -> Result<GetOutpostInstanceTypesOutput, RusotoError<GetOutpostInstanceTypesError>>;
550
551 async fn list_outposts(
553 &self,
554 input: ListOutpostsInput,
555 ) -> Result<ListOutpostsOutput, RusotoError<ListOutpostsError>>;
556
557 async fn list_sites(
559 &self,
560 input: ListSitesInput,
561 ) -> Result<ListSitesOutput, RusotoError<ListSitesError>>;
562}
563#[derive(Clone)]
565pub struct OutpostsClient {
566 client: Client,
567 region: region::Region,
568}
569
570impl OutpostsClient {
571 pub fn new(region: region::Region) -> OutpostsClient {
575 OutpostsClient {
576 client: Client::shared(),
577 region,
578 }
579 }
580
581 pub fn new_with<P, D>(
582 request_dispatcher: D,
583 credentials_provider: P,
584 region: region::Region,
585 ) -> OutpostsClient
586 where
587 P: ProvideAwsCredentials + Send + Sync + 'static,
588 D: DispatchSignedRequest + Send + Sync + 'static,
589 {
590 OutpostsClient {
591 client: Client::new_with(credentials_provider, request_dispatcher),
592 region,
593 }
594 }
595
596 pub fn new_with_client(client: Client, region: region::Region) -> OutpostsClient {
597 OutpostsClient { client, region }
598 }
599}
600
601#[async_trait]
602impl Outposts for OutpostsClient {
603 #[allow(unused_mut)]
605 async fn create_outpost(
606 &self,
607 input: CreateOutpostInput,
608 ) -> Result<CreateOutpostOutput, RusotoError<CreateOutpostError>> {
609 let request_uri = "/outposts";
610
611 let mut request = SignedRequest::new("POST", "outposts", &self.region, &request_uri);
612 request.set_content_type("application/x-amz-json-1.1".to_owned());
613
614 let encoded = Some(serde_json::to_vec(&input).unwrap());
615 request.set_payload(encoded);
616
617 let mut response = self
618 .client
619 .sign_and_dispatch(request)
620 .await
621 .map_err(RusotoError::from)?;
622 if response.status.is_success() {
623 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
624 let result = proto::json::ResponsePayload::new(&response)
625 .deserialize::<CreateOutpostOutput, _>()?;
626
627 Ok(result)
628 } else {
629 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
630 Err(CreateOutpostError::from_response(response))
631 }
632 }
633
634 #[allow(unused_mut)]
636 async fn delete_outpost(
637 &self,
638 input: DeleteOutpostInput,
639 ) -> Result<DeleteOutpostOutput, RusotoError<DeleteOutpostError>> {
640 let request_uri = format!("/outposts/{outpost_id}", outpost_id = input.outpost_id);
641
642 let mut request = SignedRequest::new("DELETE", "outposts", &self.region, &request_uri);
643 request.set_content_type("application/x-amz-json-1.1".to_owned());
644
645 let mut response = self
646 .client
647 .sign_and_dispatch(request)
648 .await
649 .map_err(RusotoError::from)?;
650 if response.status.is_success() {
651 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
652 let result = proto::json::ResponsePayload::new(&response)
653 .deserialize::<DeleteOutpostOutput, _>()?;
654
655 Ok(result)
656 } else {
657 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
658 Err(DeleteOutpostError::from_response(response))
659 }
660 }
661
662 #[allow(unused_mut)]
664 async fn delete_site(
665 &self,
666 input: DeleteSiteInput,
667 ) -> Result<DeleteSiteOutput, RusotoError<DeleteSiteError>> {
668 let request_uri = format!("/sites/{site_id}", site_id = input.site_id);
669
670 let mut request = SignedRequest::new("DELETE", "outposts", &self.region, &request_uri);
671 request.set_content_type("application/x-amz-json-1.1".to_owned());
672
673 let mut response = self
674 .client
675 .sign_and_dispatch(request)
676 .await
677 .map_err(RusotoError::from)?;
678 if response.status.is_success() {
679 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
680 let result = proto::json::ResponsePayload::new(&response)
681 .deserialize::<DeleteSiteOutput, _>()?;
682
683 Ok(result)
684 } else {
685 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
686 Err(DeleteSiteError::from_response(response))
687 }
688 }
689
690 #[allow(unused_mut)]
692 async fn get_outpost(
693 &self,
694 input: GetOutpostInput,
695 ) -> Result<GetOutpostOutput, RusotoError<GetOutpostError>> {
696 let request_uri = format!("/outposts/{outpost_id}", outpost_id = input.outpost_id);
697
698 let mut request = SignedRequest::new("GET", "outposts", &self.region, &request_uri);
699 request.set_content_type("application/x-amz-json-1.1".to_owned());
700
701 let mut response = self
702 .client
703 .sign_and_dispatch(request)
704 .await
705 .map_err(RusotoError::from)?;
706 if response.status.is_success() {
707 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
708 let result = proto::json::ResponsePayload::new(&response)
709 .deserialize::<GetOutpostOutput, _>()?;
710
711 Ok(result)
712 } else {
713 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
714 Err(GetOutpostError::from_response(response))
715 }
716 }
717
718 #[allow(unused_mut)]
720 async fn get_outpost_instance_types(
721 &self,
722 input: GetOutpostInstanceTypesInput,
723 ) -> Result<GetOutpostInstanceTypesOutput, RusotoError<GetOutpostInstanceTypesError>> {
724 let request_uri = format!(
725 "/outposts/{outpost_id}/instanceTypes",
726 outpost_id = input.outpost_id
727 );
728
729 let mut request = SignedRequest::new("GET", "outposts", &self.region, &request_uri);
730 request.set_content_type("application/x-amz-json-1.1".to_owned());
731
732 let mut params = Params::new();
733 if let Some(ref x) = input.max_results {
734 params.put("MaxResults", x);
735 }
736 if let Some(ref x) = input.next_token {
737 params.put("NextToken", x);
738 }
739 request.set_params(params);
740
741 let mut response = self
742 .client
743 .sign_and_dispatch(request)
744 .await
745 .map_err(RusotoError::from)?;
746 if response.status.is_success() {
747 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
748 let result = proto::json::ResponsePayload::new(&response)
749 .deserialize::<GetOutpostInstanceTypesOutput, _>()?;
750
751 Ok(result)
752 } else {
753 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
754 Err(GetOutpostInstanceTypesError::from_response(response))
755 }
756 }
757
758 #[allow(unused_mut)]
760 async fn list_outposts(
761 &self,
762 input: ListOutpostsInput,
763 ) -> Result<ListOutpostsOutput, RusotoError<ListOutpostsError>> {
764 let request_uri = "/outposts";
765
766 let mut request = SignedRequest::new("GET", "outposts", &self.region, &request_uri);
767 request.set_content_type("application/x-amz-json-1.1".to_owned());
768
769 let mut params = Params::new();
770 if let Some(ref x) = input.max_results {
771 params.put("MaxResults", x);
772 }
773 if let Some(ref x) = input.next_token {
774 params.put("NextToken", x);
775 }
776 request.set_params(params);
777
778 let mut response = self
779 .client
780 .sign_and_dispatch(request)
781 .await
782 .map_err(RusotoError::from)?;
783 if response.status.is_success() {
784 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
785 let result = proto::json::ResponsePayload::new(&response)
786 .deserialize::<ListOutpostsOutput, _>()?;
787
788 Ok(result)
789 } else {
790 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
791 Err(ListOutpostsError::from_response(response))
792 }
793 }
794
795 #[allow(unused_mut)]
797 async fn list_sites(
798 &self,
799 input: ListSitesInput,
800 ) -> Result<ListSitesOutput, RusotoError<ListSitesError>> {
801 let request_uri = "/sites";
802
803 let mut request = SignedRequest::new("GET", "outposts", &self.region, &request_uri);
804 request.set_content_type("application/x-amz-json-1.1".to_owned());
805
806 let mut params = Params::new();
807 if let Some(ref x) = input.max_results {
808 params.put("MaxResults", x);
809 }
810 if let Some(ref x) = input.next_token {
811 params.put("NextToken", x);
812 }
813 request.set_params(params);
814
815 let mut response = self
816 .client
817 .sign_and_dispatch(request)
818 .await
819 .map_err(RusotoError::from)?;
820 if response.status.is_success() {
821 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
822 let result =
823 proto::json::ResponsePayload::new(&response).deserialize::<ListSitesOutput, _>()?;
824
825 Ok(result)
826 } else {
827 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
828 Err(ListSitesError::from_response(response))
829 }
830 }
831}