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::proto;
23use rusoto_core::signature::SignedRequest;
24#[allow(unused_imports)]
25use serde::{Deserialize, Serialize};
26use serde_json;
27#[derive(Clone, Debug, Default, PartialEq, Serialize)]
28#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
29pub struct AcceptInvitationRequest {
30 #[serde(rename = "GraphArn")]
32 pub graph_arn: String,
33}
34
35#[derive(Clone, Debug, Default, PartialEq, Serialize)]
37#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
38pub struct Account {
39 #[serde(rename = "AccountId")]
41 pub account_id: String,
42 #[serde(rename = "EmailAddress")]
44 pub email_address: String,
45}
46
47#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
48#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
49pub struct CreateGraphResponse {
50 #[serde(rename = "GraphArn")]
52 #[serde(skip_serializing_if = "Option::is_none")]
53 pub graph_arn: Option<String>,
54}
55
56#[derive(Clone, Debug, Default, PartialEq, Serialize)]
57#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
58pub struct CreateMembersRequest {
59 #[serde(rename = "Accounts")]
61 pub accounts: Vec<Account>,
62 #[serde(rename = "GraphArn")]
64 pub graph_arn: String,
65 #[serde(rename = "Message")]
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub message: Option<String>,
69}
70
71#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
72#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
73pub struct CreateMembersResponse {
74 #[serde(rename = "Members")]
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub members: Option<Vec<MemberDetail>>,
78 #[serde(rename = "UnprocessedAccounts")]
80 #[serde(skip_serializing_if = "Option::is_none")]
81 pub unprocessed_accounts: Option<Vec<UnprocessedAccount>>,
82}
83
84#[derive(Clone, Debug, Default, PartialEq, Serialize)]
85#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
86pub struct DeleteGraphRequest {
87 #[serde(rename = "GraphArn")]
89 pub graph_arn: String,
90}
91
92#[derive(Clone, Debug, Default, PartialEq, Serialize)]
93#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
94pub struct DeleteMembersRequest {
95 #[serde(rename = "AccountIds")]
97 pub account_ids: Vec<String>,
98 #[serde(rename = "GraphArn")]
100 pub graph_arn: String,
101}
102
103#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
104#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
105pub struct DeleteMembersResponse {
106 #[serde(rename = "AccountIds")]
108 #[serde(skip_serializing_if = "Option::is_none")]
109 pub account_ids: Option<Vec<String>>,
110 #[serde(rename = "UnprocessedAccounts")]
112 #[serde(skip_serializing_if = "Option::is_none")]
113 pub unprocessed_accounts: Option<Vec<UnprocessedAccount>>,
114}
115
116#[derive(Clone, Debug, Default, PartialEq, Serialize)]
117#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
118pub struct DisassociateMembershipRequest {
119 #[serde(rename = "GraphArn")]
121 pub graph_arn: String,
122}
123
124#[derive(Clone, Debug, Default, PartialEq, Serialize)]
125#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
126pub struct GetMembersRequest {
127 #[serde(rename = "AccountIds")]
129 pub account_ids: Vec<String>,
130 #[serde(rename = "GraphArn")]
132 pub graph_arn: String,
133}
134
135#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
136#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
137pub struct GetMembersResponse {
138 #[serde(rename = "MemberDetails")]
140 #[serde(skip_serializing_if = "Option::is_none")]
141 pub member_details: Option<Vec<MemberDetail>>,
142 #[serde(rename = "UnprocessedAccounts")]
144 #[serde(skip_serializing_if = "Option::is_none")]
145 pub unprocessed_accounts: Option<Vec<UnprocessedAccount>>,
146}
147
148#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
150#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
151pub struct Graph {
152 #[serde(rename = "Arn")]
154 #[serde(skip_serializing_if = "Option::is_none")]
155 pub arn: Option<String>,
156 #[serde(rename = "CreatedTime")]
158 #[serde(skip_serializing_if = "Option::is_none")]
159 pub created_time: Option<f64>,
160}
161
162#[derive(Clone, Debug, Default, PartialEq, Serialize)]
163#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
164pub struct ListGraphsRequest {
165 #[serde(rename = "MaxResults")]
167 #[serde(skip_serializing_if = "Option::is_none")]
168 pub max_results: Option<i64>,
169 #[serde(rename = "NextToken")]
171 #[serde(skip_serializing_if = "Option::is_none")]
172 pub next_token: Option<String>,
173}
174
175#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
176#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
177pub struct ListGraphsResponse {
178 #[serde(rename = "GraphList")]
180 #[serde(skip_serializing_if = "Option::is_none")]
181 pub graph_list: Option<Vec<Graph>>,
182 #[serde(rename = "NextToken")]
184 #[serde(skip_serializing_if = "Option::is_none")]
185 pub next_token: Option<String>,
186}
187
188#[derive(Clone, Debug, Default, PartialEq, Serialize)]
189#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
190pub struct ListInvitationsRequest {
191 #[serde(rename = "MaxResults")]
193 #[serde(skip_serializing_if = "Option::is_none")]
194 pub max_results: Option<i64>,
195 #[serde(rename = "NextToken")]
197 #[serde(skip_serializing_if = "Option::is_none")]
198 pub next_token: Option<String>,
199}
200
201#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
202#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
203pub struct ListInvitationsResponse {
204 #[serde(rename = "Invitations")]
206 #[serde(skip_serializing_if = "Option::is_none")]
207 pub invitations: Option<Vec<MemberDetail>>,
208 #[serde(rename = "NextToken")]
210 #[serde(skip_serializing_if = "Option::is_none")]
211 pub next_token: Option<String>,
212}
213
214#[derive(Clone, Debug, Default, PartialEq, Serialize)]
215#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
216pub struct ListMembersRequest {
217 #[serde(rename = "GraphArn")]
219 pub graph_arn: String,
220 #[serde(rename = "MaxResults")]
222 #[serde(skip_serializing_if = "Option::is_none")]
223 pub max_results: Option<i64>,
224 #[serde(rename = "NextToken")]
226 #[serde(skip_serializing_if = "Option::is_none")]
227 pub next_token: Option<String>,
228}
229
230#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
231#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
232pub struct ListMembersResponse {
233 #[serde(rename = "MemberDetails")]
235 #[serde(skip_serializing_if = "Option::is_none")]
236 pub member_details: Option<Vec<MemberDetail>>,
237 #[serde(rename = "NextToken")]
239 #[serde(skip_serializing_if = "Option::is_none")]
240 pub next_token: Option<String>,
241}
242
243#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
245#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
246pub struct MemberDetail {
247 #[serde(rename = "AccountId")]
249 #[serde(skip_serializing_if = "Option::is_none")]
250 pub account_id: Option<String>,
251 #[serde(rename = "DisabledReason")]
253 #[serde(skip_serializing_if = "Option::is_none")]
254 pub disabled_reason: Option<String>,
255 #[serde(rename = "EmailAddress")]
257 #[serde(skip_serializing_if = "Option::is_none")]
258 pub email_address: Option<String>,
259 #[serde(rename = "GraphArn")]
261 #[serde(skip_serializing_if = "Option::is_none")]
262 pub graph_arn: Option<String>,
263 #[serde(rename = "InvitedTime")]
265 #[serde(skip_serializing_if = "Option::is_none")]
266 pub invited_time: Option<f64>,
267 #[serde(rename = "MasterId")]
269 #[serde(skip_serializing_if = "Option::is_none")]
270 pub master_id: Option<String>,
271 #[serde(rename = "PercentOfGraphUtilization")]
273 #[serde(skip_serializing_if = "Option::is_none")]
274 pub percent_of_graph_utilization: Option<f64>,
275 #[serde(rename = "PercentOfGraphUtilizationUpdatedTime")]
277 #[serde(skip_serializing_if = "Option::is_none")]
278 pub percent_of_graph_utilization_updated_time: Option<f64>,
279 #[serde(rename = "Status")]
281 #[serde(skip_serializing_if = "Option::is_none")]
282 pub status: Option<String>,
283 #[serde(rename = "UpdatedTime")]
285 #[serde(skip_serializing_if = "Option::is_none")]
286 pub updated_time: Option<f64>,
287}
288
289#[derive(Clone, Debug, Default, PartialEq, Serialize)]
290#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
291pub struct RejectInvitationRequest {
292 #[serde(rename = "GraphArn")]
294 pub graph_arn: String,
295}
296
297#[derive(Clone, Debug, Default, PartialEq, Serialize)]
298#[cfg_attr(feature = "deserialize_structs", derive(Deserialize))]
299pub struct StartMonitoringMemberRequest {
300 #[serde(rename = "AccountId")]
302 pub account_id: String,
303 #[serde(rename = "GraphArn")]
305 pub graph_arn: String,
306}
307
308#[derive(Clone, Debug, Default, Deserialize, PartialEq)]
310#[cfg_attr(any(test, feature = "serialize_structs"), derive(Serialize))]
311pub struct UnprocessedAccount {
312 #[serde(rename = "AccountId")]
314 #[serde(skip_serializing_if = "Option::is_none")]
315 pub account_id: Option<String>,
316 #[serde(rename = "Reason")]
318 #[serde(skip_serializing_if = "Option::is_none")]
319 pub reason: Option<String>,
320}
321
322#[derive(Debug, PartialEq)]
324pub enum AcceptInvitationError {
325 Conflict(String),
327 InternalServer(String),
329 ResourceNotFound(String),
331}
332
333impl AcceptInvitationError {
334 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<AcceptInvitationError> {
335 if let Some(err) = proto::json::Error::parse_rest(&res) {
336 match err.typ.as_str() {
337 "ConflictException" => {
338 return RusotoError::Service(AcceptInvitationError::Conflict(err.msg))
339 }
340 "InternalServerException" => {
341 return RusotoError::Service(AcceptInvitationError::InternalServer(err.msg))
342 }
343 "ResourceNotFoundException" => {
344 return RusotoError::Service(AcceptInvitationError::ResourceNotFound(err.msg))
345 }
346 "ValidationException" => return RusotoError::Validation(err.msg),
347 _ => {}
348 }
349 }
350 RusotoError::Unknown(res)
351 }
352}
353impl fmt::Display for AcceptInvitationError {
354 #[allow(unused_variables)]
355 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
356 match *self {
357 AcceptInvitationError::Conflict(ref cause) => write!(f, "{}", cause),
358 AcceptInvitationError::InternalServer(ref cause) => write!(f, "{}", cause),
359 AcceptInvitationError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
360 }
361 }
362}
363impl Error for AcceptInvitationError {}
364#[derive(Debug, PartialEq)]
366pub enum CreateGraphError {
367 Conflict(String),
369 InternalServer(String),
371 ServiceQuotaExceeded(String),
373}
374
375impl CreateGraphError {
376 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateGraphError> {
377 if let Some(err) = proto::json::Error::parse_rest(&res) {
378 match err.typ.as_str() {
379 "ConflictException" => {
380 return RusotoError::Service(CreateGraphError::Conflict(err.msg))
381 }
382 "InternalServerException" => {
383 return RusotoError::Service(CreateGraphError::InternalServer(err.msg))
384 }
385 "ServiceQuotaExceededException" => {
386 return RusotoError::Service(CreateGraphError::ServiceQuotaExceeded(err.msg))
387 }
388 "ValidationException" => return RusotoError::Validation(err.msg),
389 _ => {}
390 }
391 }
392 RusotoError::Unknown(res)
393 }
394}
395impl fmt::Display for CreateGraphError {
396 #[allow(unused_variables)]
397 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
398 match *self {
399 CreateGraphError::Conflict(ref cause) => write!(f, "{}", cause),
400 CreateGraphError::InternalServer(ref cause) => write!(f, "{}", cause),
401 CreateGraphError::ServiceQuotaExceeded(ref cause) => write!(f, "{}", cause),
402 }
403 }
404}
405impl Error for CreateGraphError {}
406#[derive(Debug, PartialEq)]
408pub enum CreateMembersError {
409 InternalServer(String),
411 ResourceNotFound(String),
413 ServiceQuotaExceeded(String),
415}
416
417impl CreateMembersError {
418 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<CreateMembersError> {
419 if let Some(err) = proto::json::Error::parse_rest(&res) {
420 match err.typ.as_str() {
421 "InternalServerException" => {
422 return RusotoError::Service(CreateMembersError::InternalServer(err.msg))
423 }
424 "ResourceNotFoundException" => {
425 return RusotoError::Service(CreateMembersError::ResourceNotFound(err.msg))
426 }
427 "ServiceQuotaExceededException" => {
428 return RusotoError::Service(CreateMembersError::ServiceQuotaExceeded(err.msg))
429 }
430 "ValidationException" => return RusotoError::Validation(err.msg),
431 _ => {}
432 }
433 }
434 RusotoError::Unknown(res)
435 }
436}
437impl fmt::Display for CreateMembersError {
438 #[allow(unused_variables)]
439 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
440 match *self {
441 CreateMembersError::InternalServer(ref cause) => write!(f, "{}", cause),
442 CreateMembersError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
443 CreateMembersError::ServiceQuotaExceeded(ref cause) => write!(f, "{}", cause),
444 }
445 }
446}
447impl Error for CreateMembersError {}
448#[derive(Debug, PartialEq)]
450pub enum DeleteGraphError {
451 InternalServer(String),
453 ResourceNotFound(String),
455}
456
457impl DeleteGraphError {
458 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteGraphError> {
459 if let Some(err) = proto::json::Error::parse_rest(&res) {
460 match err.typ.as_str() {
461 "InternalServerException" => {
462 return RusotoError::Service(DeleteGraphError::InternalServer(err.msg))
463 }
464 "ResourceNotFoundException" => {
465 return RusotoError::Service(DeleteGraphError::ResourceNotFound(err.msg))
466 }
467 "ValidationException" => return RusotoError::Validation(err.msg),
468 _ => {}
469 }
470 }
471 RusotoError::Unknown(res)
472 }
473}
474impl fmt::Display for DeleteGraphError {
475 #[allow(unused_variables)]
476 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
477 match *self {
478 DeleteGraphError::InternalServer(ref cause) => write!(f, "{}", cause),
479 DeleteGraphError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
480 }
481 }
482}
483impl Error for DeleteGraphError {}
484#[derive(Debug, PartialEq)]
486pub enum DeleteMembersError {
487 Conflict(String),
489 InternalServer(String),
491 ResourceNotFound(String),
493}
494
495impl DeleteMembersError {
496 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DeleteMembersError> {
497 if let Some(err) = proto::json::Error::parse_rest(&res) {
498 match err.typ.as_str() {
499 "ConflictException" => {
500 return RusotoError::Service(DeleteMembersError::Conflict(err.msg))
501 }
502 "InternalServerException" => {
503 return RusotoError::Service(DeleteMembersError::InternalServer(err.msg))
504 }
505 "ResourceNotFoundException" => {
506 return RusotoError::Service(DeleteMembersError::ResourceNotFound(err.msg))
507 }
508 "ValidationException" => return RusotoError::Validation(err.msg),
509 _ => {}
510 }
511 }
512 RusotoError::Unknown(res)
513 }
514}
515impl fmt::Display for DeleteMembersError {
516 #[allow(unused_variables)]
517 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
518 match *self {
519 DeleteMembersError::Conflict(ref cause) => write!(f, "{}", cause),
520 DeleteMembersError::InternalServer(ref cause) => write!(f, "{}", cause),
521 DeleteMembersError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
522 }
523 }
524}
525impl Error for DeleteMembersError {}
526#[derive(Debug, PartialEq)]
528pub enum DisassociateMembershipError {
529 Conflict(String),
531 InternalServer(String),
533 ResourceNotFound(String),
535}
536
537impl DisassociateMembershipError {
538 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<DisassociateMembershipError> {
539 if let Some(err) = proto::json::Error::parse_rest(&res) {
540 match err.typ.as_str() {
541 "ConflictException" => {
542 return RusotoError::Service(DisassociateMembershipError::Conflict(err.msg))
543 }
544 "InternalServerException" => {
545 return RusotoError::Service(DisassociateMembershipError::InternalServer(
546 err.msg,
547 ))
548 }
549 "ResourceNotFoundException" => {
550 return RusotoError::Service(DisassociateMembershipError::ResourceNotFound(
551 err.msg,
552 ))
553 }
554 "ValidationException" => return RusotoError::Validation(err.msg),
555 _ => {}
556 }
557 }
558 RusotoError::Unknown(res)
559 }
560}
561impl fmt::Display for DisassociateMembershipError {
562 #[allow(unused_variables)]
563 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
564 match *self {
565 DisassociateMembershipError::Conflict(ref cause) => write!(f, "{}", cause),
566 DisassociateMembershipError::InternalServer(ref cause) => write!(f, "{}", cause),
567 DisassociateMembershipError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
568 }
569 }
570}
571impl Error for DisassociateMembershipError {}
572#[derive(Debug, PartialEq)]
574pub enum GetMembersError {
575 InternalServer(String),
577 ResourceNotFound(String),
579}
580
581impl GetMembersError {
582 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<GetMembersError> {
583 if let Some(err) = proto::json::Error::parse_rest(&res) {
584 match err.typ.as_str() {
585 "InternalServerException" => {
586 return RusotoError::Service(GetMembersError::InternalServer(err.msg))
587 }
588 "ResourceNotFoundException" => {
589 return RusotoError::Service(GetMembersError::ResourceNotFound(err.msg))
590 }
591 "ValidationException" => return RusotoError::Validation(err.msg),
592 _ => {}
593 }
594 }
595 RusotoError::Unknown(res)
596 }
597}
598impl fmt::Display for GetMembersError {
599 #[allow(unused_variables)]
600 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
601 match *self {
602 GetMembersError::InternalServer(ref cause) => write!(f, "{}", cause),
603 GetMembersError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
604 }
605 }
606}
607impl Error for GetMembersError {}
608#[derive(Debug, PartialEq)]
610pub enum ListGraphsError {
611 InternalServer(String),
613}
614
615impl ListGraphsError {
616 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListGraphsError> {
617 if let Some(err) = proto::json::Error::parse_rest(&res) {
618 match err.typ.as_str() {
619 "InternalServerException" => {
620 return RusotoError::Service(ListGraphsError::InternalServer(err.msg))
621 }
622 "ValidationException" => return RusotoError::Validation(err.msg),
623 _ => {}
624 }
625 }
626 RusotoError::Unknown(res)
627 }
628}
629impl fmt::Display for ListGraphsError {
630 #[allow(unused_variables)]
631 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
632 match *self {
633 ListGraphsError::InternalServer(ref cause) => write!(f, "{}", cause),
634 }
635 }
636}
637impl Error for ListGraphsError {}
638#[derive(Debug, PartialEq)]
640pub enum ListInvitationsError {
641 InternalServer(String),
643}
644
645impl ListInvitationsError {
646 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListInvitationsError> {
647 if let Some(err) = proto::json::Error::parse_rest(&res) {
648 match err.typ.as_str() {
649 "InternalServerException" => {
650 return RusotoError::Service(ListInvitationsError::InternalServer(err.msg))
651 }
652 "ValidationException" => return RusotoError::Validation(err.msg),
653 _ => {}
654 }
655 }
656 RusotoError::Unknown(res)
657 }
658}
659impl fmt::Display for ListInvitationsError {
660 #[allow(unused_variables)]
661 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
662 match *self {
663 ListInvitationsError::InternalServer(ref cause) => write!(f, "{}", cause),
664 }
665 }
666}
667impl Error for ListInvitationsError {}
668#[derive(Debug, PartialEq)]
670pub enum ListMembersError {
671 InternalServer(String),
673 ResourceNotFound(String),
675}
676
677impl ListMembersError {
678 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<ListMembersError> {
679 if let Some(err) = proto::json::Error::parse_rest(&res) {
680 match err.typ.as_str() {
681 "InternalServerException" => {
682 return RusotoError::Service(ListMembersError::InternalServer(err.msg))
683 }
684 "ResourceNotFoundException" => {
685 return RusotoError::Service(ListMembersError::ResourceNotFound(err.msg))
686 }
687 "ValidationException" => return RusotoError::Validation(err.msg),
688 _ => {}
689 }
690 }
691 RusotoError::Unknown(res)
692 }
693}
694impl fmt::Display for ListMembersError {
695 #[allow(unused_variables)]
696 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
697 match *self {
698 ListMembersError::InternalServer(ref cause) => write!(f, "{}", cause),
699 ListMembersError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
700 }
701 }
702}
703impl Error for ListMembersError {}
704#[derive(Debug, PartialEq)]
706pub enum RejectInvitationError {
707 Conflict(String),
709 InternalServer(String),
711 ResourceNotFound(String),
713}
714
715impl RejectInvitationError {
716 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<RejectInvitationError> {
717 if let Some(err) = proto::json::Error::parse_rest(&res) {
718 match err.typ.as_str() {
719 "ConflictException" => {
720 return RusotoError::Service(RejectInvitationError::Conflict(err.msg))
721 }
722 "InternalServerException" => {
723 return RusotoError::Service(RejectInvitationError::InternalServer(err.msg))
724 }
725 "ResourceNotFoundException" => {
726 return RusotoError::Service(RejectInvitationError::ResourceNotFound(err.msg))
727 }
728 "ValidationException" => return RusotoError::Validation(err.msg),
729 _ => {}
730 }
731 }
732 RusotoError::Unknown(res)
733 }
734}
735impl fmt::Display for RejectInvitationError {
736 #[allow(unused_variables)]
737 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
738 match *self {
739 RejectInvitationError::Conflict(ref cause) => write!(f, "{}", cause),
740 RejectInvitationError::InternalServer(ref cause) => write!(f, "{}", cause),
741 RejectInvitationError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
742 }
743 }
744}
745impl Error for RejectInvitationError {}
746#[derive(Debug, PartialEq)]
748pub enum StartMonitoringMemberError {
749 Conflict(String),
751 InternalServer(String),
753 ResourceNotFound(String),
755 ServiceQuotaExceeded(String),
757}
758
759impl StartMonitoringMemberError {
760 pub fn from_response(res: BufferedHttpResponse) -> RusotoError<StartMonitoringMemberError> {
761 if let Some(err) = proto::json::Error::parse_rest(&res) {
762 match err.typ.as_str() {
763 "ConflictException" => {
764 return RusotoError::Service(StartMonitoringMemberError::Conflict(err.msg))
765 }
766 "InternalServerException" => {
767 return RusotoError::Service(StartMonitoringMemberError::InternalServer(
768 err.msg,
769 ))
770 }
771 "ResourceNotFoundException" => {
772 return RusotoError::Service(StartMonitoringMemberError::ResourceNotFound(
773 err.msg,
774 ))
775 }
776 "ServiceQuotaExceededException" => {
777 return RusotoError::Service(StartMonitoringMemberError::ServiceQuotaExceeded(
778 err.msg,
779 ))
780 }
781 "ValidationException" => return RusotoError::Validation(err.msg),
782 _ => {}
783 }
784 }
785 RusotoError::Unknown(res)
786 }
787}
788impl fmt::Display for StartMonitoringMemberError {
789 #[allow(unused_variables)]
790 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
791 match *self {
792 StartMonitoringMemberError::Conflict(ref cause) => write!(f, "{}", cause),
793 StartMonitoringMemberError::InternalServer(ref cause) => write!(f, "{}", cause),
794 StartMonitoringMemberError::ResourceNotFound(ref cause) => write!(f, "{}", cause),
795 StartMonitoringMemberError::ServiceQuotaExceeded(ref cause) => write!(f, "{}", cause),
796 }
797 }
798}
799impl Error for StartMonitoringMemberError {}
800#[async_trait]
802pub trait Detective {
803 async fn accept_invitation(
805 &self,
806 input: AcceptInvitationRequest,
807 ) -> Result<(), RusotoError<AcceptInvitationError>>;
808
809 async fn create_graph(&self) -> Result<CreateGraphResponse, RusotoError<CreateGraphError>>;
811
812 async fn create_members(
814 &self,
815 input: CreateMembersRequest,
816 ) -> Result<CreateMembersResponse, RusotoError<CreateMembersError>>;
817
818 async fn delete_graph(
820 &self,
821 input: DeleteGraphRequest,
822 ) -> Result<(), RusotoError<DeleteGraphError>>;
823
824 async fn delete_members(
826 &self,
827 input: DeleteMembersRequest,
828 ) -> Result<DeleteMembersResponse, RusotoError<DeleteMembersError>>;
829
830 async fn disassociate_membership(
832 &self,
833 input: DisassociateMembershipRequest,
834 ) -> Result<(), RusotoError<DisassociateMembershipError>>;
835
836 async fn get_members(
838 &self,
839 input: GetMembersRequest,
840 ) -> Result<GetMembersResponse, RusotoError<GetMembersError>>;
841
842 async fn list_graphs(
844 &self,
845 input: ListGraphsRequest,
846 ) -> Result<ListGraphsResponse, RusotoError<ListGraphsError>>;
847
848 async fn list_invitations(
850 &self,
851 input: ListInvitationsRequest,
852 ) -> Result<ListInvitationsResponse, RusotoError<ListInvitationsError>>;
853
854 async fn list_members(
856 &self,
857 input: ListMembersRequest,
858 ) -> Result<ListMembersResponse, RusotoError<ListMembersError>>;
859
860 async fn reject_invitation(
862 &self,
863 input: RejectInvitationRequest,
864 ) -> Result<(), RusotoError<RejectInvitationError>>;
865
866 async fn start_monitoring_member(
868 &self,
869 input: StartMonitoringMemberRequest,
870 ) -> Result<(), RusotoError<StartMonitoringMemberError>>;
871}
872#[derive(Clone)]
874pub struct DetectiveClient {
875 client: Client,
876 region: region::Region,
877}
878
879impl DetectiveClient {
880 pub fn new(region: region::Region) -> DetectiveClient {
884 DetectiveClient {
885 client: Client::shared(),
886 region,
887 }
888 }
889
890 pub fn new_with<P, D>(
891 request_dispatcher: D,
892 credentials_provider: P,
893 region: region::Region,
894 ) -> DetectiveClient
895 where
896 P: ProvideAwsCredentials + Send + Sync + 'static,
897 D: DispatchSignedRequest + Send + Sync + 'static,
898 {
899 DetectiveClient {
900 client: Client::new_with(credentials_provider, request_dispatcher),
901 region,
902 }
903 }
904
905 pub fn new_with_client(client: Client, region: region::Region) -> DetectiveClient {
906 DetectiveClient { client, region }
907 }
908}
909
910#[async_trait]
911impl Detective for DetectiveClient {
912 #[allow(unused_mut)]
914 async fn accept_invitation(
915 &self,
916 input: AcceptInvitationRequest,
917 ) -> Result<(), RusotoError<AcceptInvitationError>> {
918 let request_uri = "/invitation";
919
920 let mut request = SignedRequest::new("PUT", "detective", &self.region, &request_uri);
921 request.set_content_type("application/x-amz-json-1.1".to_owned());
922
923 request.set_endpoint_prefix("api.detective".to_string());
924 let encoded = Some(serde_json::to_vec(&input).unwrap());
925 request.set_payload(encoded);
926
927 let mut response = self
928 .client
929 .sign_and_dispatch(request)
930 .await
931 .map_err(RusotoError::from)?;
932 if response.status.is_success() {
933 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
934 let result = ::std::mem::drop(response);
935
936 Ok(result)
937 } else {
938 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
939 Err(AcceptInvitationError::from_response(response))
940 }
941 }
942
943 #[allow(unused_mut)]
945 async fn create_graph(&self) -> Result<CreateGraphResponse, RusotoError<CreateGraphError>> {
946 let request_uri = "/graph";
947
948 let mut request = SignedRequest::new("POST", "detective", &self.region, &request_uri);
949 request.set_content_type("application/x-amz-json-1.1".to_owned());
950
951 request.set_endpoint_prefix("api.detective".to_string());
952
953 let mut response = self
954 .client
955 .sign_and_dispatch(request)
956 .await
957 .map_err(RusotoError::from)?;
958 if response.status.is_success() {
959 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
960 let result = proto::json::ResponsePayload::new(&response)
961 .deserialize::<CreateGraphResponse, _>()?;
962
963 Ok(result)
964 } else {
965 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
966 Err(CreateGraphError::from_response(response))
967 }
968 }
969
970 #[allow(unused_mut)]
972 async fn create_members(
973 &self,
974 input: CreateMembersRequest,
975 ) -> Result<CreateMembersResponse, RusotoError<CreateMembersError>> {
976 let request_uri = "/graph/members";
977
978 let mut request = SignedRequest::new("POST", "detective", &self.region, &request_uri);
979 request.set_content_type("application/x-amz-json-1.1".to_owned());
980
981 request.set_endpoint_prefix("api.detective".to_string());
982 let encoded = Some(serde_json::to_vec(&input).unwrap());
983 request.set_payload(encoded);
984
985 let mut response = self
986 .client
987 .sign_and_dispatch(request)
988 .await
989 .map_err(RusotoError::from)?;
990 if response.status.is_success() {
991 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
992 let result = proto::json::ResponsePayload::new(&response)
993 .deserialize::<CreateMembersResponse, _>()?;
994
995 Ok(result)
996 } else {
997 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
998 Err(CreateMembersError::from_response(response))
999 }
1000 }
1001
1002 #[allow(unused_mut)]
1004 async fn delete_graph(
1005 &self,
1006 input: DeleteGraphRequest,
1007 ) -> Result<(), RusotoError<DeleteGraphError>> {
1008 let request_uri = "/graph/removal";
1009
1010 let mut request = SignedRequest::new("POST", "detective", &self.region, &request_uri);
1011 request.set_content_type("application/x-amz-json-1.1".to_owned());
1012
1013 request.set_endpoint_prefix("api.detective".to_string());
1014 let encoded = Some(serde_json::to_vec(&input).unwrap());
1015 request.set_payload(encoded);
1016
1017 let mut response = self
1018 .client
1019 .sign_and_dispatch(request)
1020 .await
1021 .map_err(RusotoError::from)?;
1022 if response.status.is_success() {
1023 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1024 let result = ::std::mem::drop(response);
1025
1026 Ok(result)
1027 } else {
1028 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1029 Err(DeleteGraphError::from_response(response))
1030 }
1031 }
1032
1033 #[allow(unused_mut)]
1035 async fn delete_members(
1036 &self,
1037 input: DeleteMembersRequest,
1038 ) -> Result<DeleteMembersResponse, RusotoError<DeleteMembersError>> {
1039 let request_uri = "/graph/members/removal";
1040
1041 let mut request = SignedRequest::new("POST", "detective", &self.region, &request_uri);
1042 request.set_content_type("application/x-amz-json-1.1".to_owned());
1043
1044 request.set_endpoint_prefix("api.detective".to_string());
1045 let encoded = Some(serde_json::to_vec(&input).unwrap());
1046 request.set_payload(encoded);
1047
1048 let mut response = self
1049 .client
1050 .sign_and_dispatch(request)
1051 .await
1052 .map_err(RusotoError::from)?;
1053 if response.status.is_success() {
1054 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1055 let result = proto::json::ResponsePayload::new(&response)
1056 .deserialize::<DeleteMembersResponse, _>()?;
1057
1058 Ok(result)
1059 } else {
1060 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1061 Err(DeleteMembersError::from_response(response))
1062 }
1063 }
1064
1065 #[allow(unused_mut)]
1067 async fn disassociate_membership(
1068 &self,
1069 input: DisassociateMembershipRequest,
1070 ) -> Result<(), RusotoError<DisassociateMembershipError>> {
1071 let request_uri = "/membership/removal";
1072
1073 let mut request = SignedRequest::new("POST", "detective", &self.region, &request_uri);
1074 request.set_content_type("application/x-amz-json-1.1".to_owned());
1075
1076 request.set_endpoint_prefix("api.detective".to_string());
1077 let encoded = Some(serde_json::to_vec(&input).unwrap());
1078 request.set_payload(encoded);
1079
1080 let mut response = self
1081 .client
1082 .sign_and_dispatch(request)
1083 .await
1084 .map_err(RusotoError::from)?;
1085 if response.status.is_success() {
1086 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1087 let result = ::std::mem::drop(response);
1088
1089 Ok(result)
1090 } else {
1091 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1092 Err(DisassociateMembershipError::from_response(response))
1093 }
1094 }
1095
1096 #[allow(unused_mut)]
1098 async fn get_members(
1099 &self,
1100 input: GetMembersRequest,
1101 ) -> Result<GetMembersResponse, RusotoError<GetMembersError>> {
1102 let request_uri = "/graph/members/get";
1103
1104 let mut request = SignedRequest::new("POST", "detective", &self.region, &request_uri);
1105 request.set_content_type("application/x-amz-json-1.1".to_owned());
1106
1107 request.set_endpoint_prefix("api.detective".to_string());
1108 let encoded = Some(serde_json::to_vec(&input).unwrap());
1109 request.set_payload(encoded);
1110
1111 let mut response = self
1112 .client
1113 .sign_and_dispatch(request)
1114 .await
1115 .map_err(RusotoError::from)?;
1116 if response.status.is_success() {
1117 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1118 let result = proto::json::ResponsePayload::new(&response)
1119 .deserialize::<GetMembersResponse, _>()?;
1120
1121 Ok(result)
1122 } else {
1123 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1124 Err(GetMembersError::from_response(response))
1125 }
1126 }
1127
1128 #[allow(unused_mut)]
1130 async fn list_graphs(
1131 &self,
1132 input: ListGraphsRequest,
1133 ) -> Result<ListGraphsResponse, RusotoError<ListGraphsError>> {
1134 let request_uri = "/graphs/list";
1135
1136 let mut request = SignedRequest::new("POST", "detective", &self.region, &request_uri);
1137 request.set_content_type("application/x-amz-json-1.1".to_owned());
1138
1139 request.set_endpoint_prefix("api.detective".to_string());
1140 let encoded = Some(serde_json::to_vec(&input).unwrap());
1141 request.set_payload(encoded);
1142
1143 let mut response = self
1144 .client
1145 .sign_and_dispatch(request)
1146 .await
1147 .map_err(RusotoError::from)?;
1148 if response.status.is_success() {
1149 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1150 let result = proto::json::ResponsePayload::new(&response)
1151 .deserialize::<ListGraphsResponse, _>()?;
1152
1153 Ok(result)
1154 } else {
1155 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1156 Err(ListGraphsError::from_response(response))
1157 }
1158 }
1159
1160 #[allow(unused_mut)]
1162 async fn list_invitations(
1163 &self,
1164 input: ListInvitationsRequest,
1165 ) -> Result<ListInvitationsResponse, RusotoError<ListInvitationsError>> {
1166 let request_uri = "/invitations/list";
1167
1168 let mut request = SignedRequest::new("POST", "detective", &self.region, &request_uri);
1169 request.set_content_type("application/x-amz-json-1.1".to_owned());
1170
1171 request.set_endpoint_prefix("api.detective".to_string());
1172 let encoded = Some(serde_json::to_vec(&input).unwrap());
1173 request.set_payload(encoded);
1174
1175 let mut response = self
1176 .client
1177 .sign_and_dispatch(request)
1178 .await
1179 .map_err(RusotoError::from)?;
1180 if response.status.is_success() {
1181 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1182 let result = proto::json::ResponsePayload::new(&response)
1183 .deserialize::<ListInvitationsResponse, _>()?;
1184
1185 Ok(result)
1186 } else {
1187 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1188 Err(ListInvitationsError::from_response(response))
1189 }
1190 }
1191
1192 #[allow(unused_mut)]
1194 async fn list_members(
1195 &self,
1196 input: ListMembersRequest,
1197 ) -> Result<ListMembersResponse, RusotoError<ListMembersError>> {
1198 let request_uri = "/graph/members/list";
1199
1200 let mut request = SignedRequest::new("POST", "detective", &self.region, &request_uri);
1201 request.set_content_type("application/x-amz-json-1.1".to_owned());
1202
1203 request.set_endpoint_prefix("api.detective".to_string());
1204 let encoded = Some(serde_json::to_vec(&input).unwrap());
1205 request.set_payload(encoded);
1206
1207 let mut response = self
1208 .client
1209 .sign_and_dispatch(request)
1210 .await
1211 .map_err(RusotoError::from)?;
1212 if response.status.is_success() {
1213 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1214 let result = proto::json::ResponsePayload::new(&response)
1215 .deserialize::<ListMembersResponse, _>()?;
1216
1217 Ok(result)
1218 } else {
1219 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1220 Err(ListMembersError::from_response(response))
1221 }
1222 }
1223
1224 #[allow(unused_mut)]
1226 async fn reject_invitation(
1227 &self,
1228 input: RejectInvitationRequest,
1229 ) -> Result<(), RusotoError<RejectInvitationError>> {
1230 let request_uri = "/invitation/removal";
1231
1232 let mut request = SignedRequest::new("POST", "detective", &self.region, &request_uri);
1233 request.set_content_type("application/x-amz-json-1.1".to_owned());
1234
1235 request.set_endpoint_prefix("api.detective".to_string());
1236 let encoded = Some(serde_json::to_vec(&input).unwrap());
1237 request.set_payload(encoded);
1238
1239 let mut response = self
1240 .client
1241 .sign_and_dispatch(request)
1242 .await
1243 .map_err(RusotoError::from)?;
1244 if response.status.is_success() {
1245 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1246 let result = ::std::mem::drop(response);
1247
1248 Ok(result)
1249 } else {
1250 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1251 Err(RejectInvitationError::from_response(response))
1252 }
1253 }
1254
1255 #[allow(unused_mut)]
1257 async fn start_monitoring_member(
1258 &self,
1259 input: StartMonitoringMemberRequest,
1260 ) -> Result<(), RusotoError<StartMonitoringMemberError>> {
1261 let request_uri = "/graph/member/monitoringstate";
1262
1263 let mut request = SignedRequest::new("POST", "detective", &self.region, &request_uri);
1264 request.set_content_type("application/x-amz-json-1.1".to_owned());
1265
1266 request.set_endpoint_prefix("api.detective".to_string());
1267 let encoded = Some(serde_json::to_vec(&input).unwrap());
1268 request.set_payload(encoded);
1269
1270 let mut response = self
1271 .client
1272 .sign_and_dispatch(request)
1273 .await
1274 .map_err(RusotoError::from)?;
1275 if response.status.is_success() {
1276 let mut response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1277 let result = ::std::mem::drop(response);
1278
1279 Ok(result)
1280 } else {
1281 let response = response.buffer().await.map_err(RusotoError::HttpDispatch)?;
1282 Err(StartMonitoringMemberError::from_response(response))
1283 }
1284 }
1285}