1use aws_sdk_iam as iam;
2use clap::{Args, Subcommand};
3
4use config::Config;
5use error::RawsError;
6
7mod account;
8mod user;
9
10type IamResult<T = Box<dyn show::Show>> = Result<T, iam::Error>;
11
12#[derive(Debug, Subcommand)]
14pub enum Iam {
15 CreateUser(user::CreateUser),
16 DeleteUser(user::DeleteUser),
17 GetUser(user::GetUser),
18 ListUsers(user::ListUsers),
19 GetAccountSummary(account::GetAccountSummary),
20 GetAccountAuthorizationDetails(account::GetAccountAuthorizationDetails),
21 CreateAccountAlias(account::CreateAccountAlias),
22 DeleteAccountAlias(account::DeleteAccountAlias),
23 ListAccountAliases(account::ListAccountAliases),
24}
25
26impl Iam {
27 async fn execute(self, config: &Config) -> IamResult {
28 match self {
29 Self::CreateUser(create_user) => create_user.execute(config).await,
30 Self::DeleteUser(delete_user) => delete_user.execute(config).await,
31 Self::GetUser(get_user) => get_user.execute(config).await,
32 Self::ListUsers(list_users) => list_users.execute(config).await,
33 Self::GetAccountSummary(account_summary) => account_summary.execute(config).await,
34 Self::GetAccountAuthorizationDetails(authz_details) => {
35 authz_details.execute(config).await
36 }
37 Self::CreateAccountAlias(create_alias) => create_alias.execute(config).await,
38 Self::DeleteAccountAlias(delete_alias) => delete_alias.execute(config).await,
39 Self::ListAccountAliases(list_aliases) => list_aliases.execute(config).await,
40 }
41 }
42
43 pub async fn dispatch(self, config: Config) -> Result<(), RawsError<iam::Error>> {
44 self.execute(&config)
45 .await
46 .map(|output| config.show(output))?;
47 Ok(())
48 }
49}