use time::OffsetDateTime;
use crate::http::bucket_access_controls::BucketAccessControl;
use crate::http::object_access_controls::ObjectAccessControl;
use crate::http::objects::Owner;
pub mod delete;
pub mod get;
pub mod get_iam_policy;
pub mod insert;
pub mod list;
pub mod list_channels;
pub mod lock_retention_policy;
pub mod patch;
pub mod set_iam_policy;
pub mod test_iam_permissions;
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Default, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Bucket {
pub acl: Option<Vec<BucketAccessControl>>,
pub default_object_acl: Option<Vec<ObjectAccessControl>>,
pub lifecycle: Option<Lifecycle>,
#[serde(default, with = "time::serde::rfc3339::option")]
pub time_created: Option<OffsetDateTime>,
pub id: String,
pub name: String,
#[serde(deserialize_with = "crate::http::from_str")]
pub project_number: i64,
#[serde(deserialize_with = "crate::http::from_str")]
pub metageneration: i64,
pub cors: Option<Vec<Cors>>,
pub location: String,
pub storage_class: String,
pub etag: String,
#[serde(default, with = "time::serde::rfc3339::option")]
pub updated: Option<OffsetDateTime>,
pub default_event_based_hold: Option<bool>,
pub labels: Option<::std::collections::HashMap<String, String>>,
pub website: Option<Website>,
pub versioning: Option<Versioning>,
pub logging: Option<Logging>,
pub owner: Option<Owner>,
pub encryption: Option<Encryption>,
pub billing: Option<Billing>,
pub retention_policy: Option<RetentionPolicy>,
pub location_type: String,
pub rpo: Option<String>,
pub iam_configuration: Option<IamConfiguration>,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Billing {
pub requester_pays: bool,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Cors {
pub origin: Vec<String>,
pub method: Vec<String>,
pub response_header: Vec<String>,
pub max_age_seconds: i32,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Encryption {
pub default_kms_key_name: String,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct IamConfiguration {
pub uniform_bucket_level_access: Option<iam_configuration::UniformBucketLevelAccess>,
pub public_access_prevention: Option<iam_configuration::PublicAccessPrevention>,
}
pub mod iam_configuration {
use time::OffsetDateTime;
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct UniformBucketLevelAccess {
pub enabled: bool,
#[serde(default, with = "time::serde::rfc3339::option")]
pub locked_time: Option<OffsetDateTime>,
}
#[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, serde::Deserialize, serde::Serialize, Debug)]
#[repr(i32)]
pub enum PublicAccessPrevention {
#[serde(rename = "enforced")]
Enforced = 1,
#[serde(rename = "inherited")]
Inherited = 2,
}
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Lifecycle {
pub rule: Vec<lifecycle::Rule>,
}
pub mod lifecycle {
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Rule {
pub action: Option<rule::Action>,
pub condition: Option<rule::Condition>,
}
pub mod rule {
use time::Date;
time::serde::format_description!(date_format, Date, "[year]-[month]-[day]");
#[derive(Clone, Debug, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum ActionType {
Delete,
SetStorageClass,
AbortIncompleteMultipartUpload,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Action {
pub r#type: ActionType,
pub storage_class: Option<String>,
}
#[derive(Clone, PartialEq, Eq, Default, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Condition {
pub age: Option<i32>,
#[serde(default, with = "date_format::option")]
pub created_before: Option<Date>,
#[serde(default, with = "date_format::option")]
pub custom_time_before: Option<Date>,
pub days_since_custom_time: Option<i32>,
pub days_since_noncurrent_time: Option<i32>,
pub is_live: Option<bool>,
pub matches_storage_class: Option<Vec<String>>,
#[serde(default, with = "date_format::option")]
pub noncurrent_time_before: Option<Date>,
pub num_newer_versions: Option<i32>,
}
}
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Logging {
pub log_bucket: String,
pub log_object_prefix: String,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct RetentionPolicy {
#[serde(default, with = "time::serde::rfc3339::option")]
pub effective_time: Option<OffsetDateTime>,
pub is_locked: Option<bool>,
#[serde(deserialize_with = "crate::http::from_str")]
pub retention_period: u64,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Versioning {
pub enabled: bool,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Website {
pub main_page_suffix: String,
pub not_found_page: String,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Autoclass {
pub enabled: bool,
#[serde(default, with = "time::serde::rfc3339::option")]
pub toggle_time: Option<OffsetDateTime>,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Default, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Policy {
pub version: i32,
pub bindings: Vec<Binding>,
pub etag: String,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Default, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Binding {
pub role: String,
pub members: Vec<String>,
pub condition: Option<Condition>,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize, serde::Serialize, Default, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Condition {
pub expression: String,
pub title: String,
#[serde(default)]
pub description: Option<String>,
}