pub mod dynamodb;
pub mod ecs;
pub mod iam;
pub mod lambda;
pub mod logs;
pub mod s3;
use vantage_table::any::AnyTable;
use crate::AwsAccount;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FactoryMode {
List,
Single,
}
#[derive(Debug, Clone)]
pub struct Factory {
aws: AwsAccount,
}
impl Factory {
pub fn new(aws: AwsAccount) -> Self {
Self { aws }
}
pub fn known_names() -> &'static [&'static str] {
&[
"iam.user",
"iam.users",
"iam.group",
"iam.groups",
"iam.role",
"iam.roles",
"iam.policy",
"iam.policies",
"iam.instance_profile",
"iam.instance_profiles",
"log.group",
"log.groups",
"ecs.cluster",
"ecs.clusters",
"ecs.task_definition",
"ecs.task_definitions",
"s3.bucket",
"s3.buckets",
"lambda.function",
"lambda.functions",
"dynamodb.table",
"dynamodb.tables",
]
}
pub fn for_name(&self, name: &str) -> Option<(AnyTable, FactoryMode)> {
let aws = self.aws.clone();
let (table, mode) = match name {
"iam.user" => (AnyTable::new(iam::users_table(aws)), FactoryMode::Single),
"iam.users" => (AnyTable::new(iam::users_table(aws)), FactoryMode::List),
"iam.group" => (AnyTable::new(iam::groups_table(aws)), FactoryMode::Single),
"iam.groups" => (AnyTable::new(iam::groups_table(aws)), FactoryMode::List),
"iam.role" => (AnyTable::new(iam::roles_table(aws)), FactoryMode::Single),
"iam.roles" => (AnyTable::new(iam::roles_table(aws)), FactoryMode::List),
"iam.policy" => (AnyTable::new(iam::policies_table(aws)), FactoryMode::Single),
"iam.policies" => (AnyTable::new(iam::policies_table(aws)), FactoryMode::List),
"iam.instance_profile" => (
AnyTable::new(iam::instance_profiles_table(aws)),
FactoryMode::Single,
),
"iam.instance_profiles" => (
AnyTable::new(iam::instance_profiles_table(aws)),
FactoryMode::List,
),
"log.group" => (AnyTable::new(logs::groups_table(aws)), FactoryMode::Single),
"log.groups" => (AnyTable::new(logs::groups_table(aws)), FactoryMode::List),
"ecs.cluster" => (AnyTable::new(ecs::clusters_table(aws)), FactoryMode::Single),
"ecs.clusters" => (AnyTable::new(ecs::clusters_table(aws)), FactoryMode::List),
"ecs.task_definition" => (
AnyTable::new(ecs::task_definitions_table(aws)),
FactoryMode::Single,
),
"ecs.task_definitions" => (
AnyTable::new(ecs::task_definitions_table(aws)),
FactoryMode::List,
),
"s3.bucket" => (AnyTable::new(s3::buckets_table(aws)), FactoryMode::Single),
"s3.buckets" => (AnyTable::new(s3::buckets_table(aws)), FactoryMode::List),
"lambda.function" => (
AnyTable::new(lambda::functions_table(aws)),
FactoryMode::Single,
),
"lambda.functions" => (
AnyTable::new(lambda::functions_table(aws)),
FactoryMode::List,
),
"dynamodb.table" => (
AnyTable::new(dynamodb::tables_table(aws)),
FactoryMode::Single,
),
"dynamodb.tables" => (
AnyTable::new(dynamodb::tables_table(aws)),
FactoryMode::List,
),
_ => return None,
};
Some((table, mode))
}
pub fn from_arn(&self, arn: &str) -> Option<AnyTable> {
let aws = self.aws.clone();
if let Some(t) = iam::user::User::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
if let Some(t) = iam::group::Group::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
if let Some(t) = iam::role::Role::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
if let Some(t) = iam::policy::Policy::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
if let Some(t) = iam::instance_profile::InstanceProfile::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
if let Some(t) = iam::access_key::AccessKey::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
if let Some(t) = logs::stream::LogStream::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
if let Some(t) = logs::group::LogGroup::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
if let Some(t) = ecs::cluster::Cluster::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
if let Some(t) = s3::object::Object::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
if let Some(t) = s3::bucket::Bucket::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
if let Some(t) = lambda::function::Function::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
if let Some(t) = dynamodb::table::DynamoDbTable::from_arn(arn, aws.clone()) {
return Some(AnyTable::new(t));
}
None
}
}