raws_iam/
lib.rs

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/// Identity and Access Management (IAM)
13#[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}