use serde::{Deserialize, Serialize};
use vantage_table::table::Table;
use crate::types::AwsDateTime;
use crate::{AwsAccount, eq};
use super::object::{Object, objects_table};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Bucket {
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "CreationDate", default)]
pub creation_date: String,
}
pub fn buckets_table(aws: AwsAccount) -> Table<AwsAccount, Bucket> {
Table::new("restxml/Buckets.Bucket:s3/GET /", aws)
.with_id_column("Name")
.with_title_column_of::<AwsDateTime>("CreationDate")
.with_many("objects", "Bucket", objects_table)
}
impl Bucket {
pub fn from_arn(arn: &str, aws: AwsAccount) -> Option<Table<AwsAccount, Bucket>> {
let name = arn.strip_prefix("arn:aws:s3:::")?;
let bucket = name.split('/').next().unwrap_or(name);
if bucket.is_empty() {
return None;
}
let mut t = buckets_table(aws);
t.add_condition(eq("Name", bucket.to_string()));
Some(t)
}
pub fn ref_objects(&self, aws: AwsAccount) -> Table<AwsAccount, Object> {
let mut t = objects_table(aws);
t.add_condition(eq("Bucket", self.name.clone()));
t
}
}