vantage_aws/models/iam/
user.rs1use serde::{Deserialize, Serialize};
2use vantage_table::table::Table;
3
4use crate::{AwsAccount, eq};
5
6use super::access_key::{AccessKey, access_keys_table};
7use super::attached_policy::{AttachedPolicy, attached_user_policies_table};
8use super::group::{Group, groups_for_user_table};
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
16pub struct User {
17 #[serde(rename = "UserName")]
18 pub user_name: String,
19 #[serde(rename = "UserId", default)]
20 pub user_id: String,
21 #[serde(rename = "Arn", default)]
22 pub arn: String,
23 #[serde(rename = "Path", default)]
24 pub path: String,
25 #[serde(rename = "CreateDate", default)]
26 pub create_date: String,
27 #[serde(rename = "PasswordLastUsed", default)]
28 pub password_last_used: String,
29}
30
31pub fn users_table(aws: AwsAccount) -> Table<AwsAccount, User> {
54 Table::new("query/Users:iam/2010-05-08.ListUsers", aws)
55 .with_id_column("UserName")
56 .with_column_of::<String>("UserId")
57 .with_column_of::<String>("Arn")
58 .with_column_of::<String>("Path")
59 .with_column_of::<String>("CreateDate")
60 .with_column_of::<String>("PasswordLastUsed")
61 .with_many("groups", "UserName", groups_for_user_table)
62 .with_many("access_keys", "UserName", access_keys_table)
63 .with_many(
64 "attached_policies",
65 "UserName",
66 attached_user_policies_table,
67 )
68}
69
70impl User {
71 pub fn ref_groups(&self, aws: AwsAccount) -> Table<AwsAccount, Group> {
73 let mut t = groups_for_user_table(aws);
74 t.add_condition(eq("UserName", self.user_name.clone()));
75 t
76 }
77
78 pub fn ref_access_keys(&self, aws: AwsAccount) -> Table<AwsAccount, AccessKey> {
80 let mut t = access_keys_table(aws);
81 t.add_condition(eq("UserName", self.user_name.clone()));
82 t
83 }
84
85 pub fn ref_attached_policies(&self, aws: AwsAccount) -> Table<AwsAccount, AttachedPolicy> {
87 let mut t = attached_user_policies_table(aws);
88 t.add_condition(eq("UserName", self.user_name.clone()));
89 t
90 }
91}