mod select_object_content;
pub use select_object_content::*;
use serde::{Deserialize, Serialize};
use crate::time::UtcTime;
#[derive(Clone, Debug, PartialEq)]
pub struct Region(pub String);
trait XmlSelf {}
macro_rules! impl_xmlself {
($($name:tt )*) => {
$(
impl XmlSelf for $name{}
)*
};
}
impl_xmlself!(
CommonPrefix
LegalHold
VersioningConfiguration
Retention
CompleteMultipartUpload
CompleteMultipartUploadResult
InitiateMultipartUploadResult
ListMultipartUploadsResult
CopyPartResult
ListPartsResult
ListAllMyBucketsResult
ListBucketResult
ListVersionsResult
ServerSideEncryptionConfiguration
CORSConfiguration
LocationConstraint
PublicAccessBlockConfiguration
AccessControlPolicy
);
pub trait ToXml {
fn to_xml(&self) -> crate::error::Result<String>;
}
impl<T: Serialize + XmlSelf> ToXml for T {
fn to_xml(&self) -> crate::error::Result<String> {
crate::xml::ser::to_string(&self).map_err(Into::into)
}
}
pub trait FromXml: Sized {
fn from_xml(v: String) -> crate::error::Result<Self>;
}
impl<'de, T: Deserialize<'de> + XmlSelf> FromXml for T {
fn from_xml(v: String) -> crate::error::Result<Self> {
crate::xml::de::from_string(v).map_err(Into::into)
}
}
impl Region {
pub fn from<S>(region: S) -> Self
where
S: Into<String>,
{
return Self(region.into());
}
pub fn as_str(&self) -> &str {
self.0.as_str()
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct AccessControlList {
pub grant: Vec<Grant>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct AccessControlPolicy {
pub access_control_list: AccessControlList,
pub owner: Option<Owner>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Bucket {
pub name: String,
pub creation_date: String,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Buckets {
#[serde(default)]
pub bucket: Vec<Bucket>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct CommonPrefix {
pub prefix: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct CompleteMultipartUpload {
#[serde(default, rename = "Part")]
pub parts: Vec<Part>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct CompleteMultipartUploadResult {
pub bucket: String,
pub key: String,
pub e_tag: String,
pub location: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct CopyPartResult {
pub e_tag: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct CORSConfiguration {
#[serde(rename = "CORSRule")]
pub rules: Vec<CORSRule>,
}
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
#[serde(rename_all = "PascalCase")]
pub struct CORSRule {
#[serde(rename = "AllowedMethod", default)]
pub allowed_methods: Vec<String>,
#[serde(rename = "AllowedOrigin", default)]
pub allowed_origins: Vec<String>,
#[serde(rename = "AllowedHeader", default)]
pub allowed_headers: Vec<String>,
#[serde(rename = "ExposeHeader", default)]
pub expose_headers: Vec<String>,
#[serde(rename = "ID")]
pub id: Option<String>,
pub max_age_seconds: usize,
}
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
#[serde(rename_all = "PascalCase")]
pub struct DefaultRetention {
pub days: Option<usize>,
pub mode: RetentionMode,
pub years: Option<usize>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct DeleteMarkerEntry {
pub key: String,
pub last_modified: String,
pub is_latest: bool,
pub owner: Option<Owner>,
pub version_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Grant {
pub grantee: Option<Grantee>,
pub permission: Option<Permission>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Grantee {
pub display_name: Option<String>,
pub email_address: Option<String>,
pub id: Option<String>,
#[serde(alias = "Type", alias = "type")]
pub r#type: GranteeType,
pub uri: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub(crate) struct InitiateMultipartUploadResult {
pub bucket: String,
pub key: String,
pub upload_id: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Initiator {
pub display_name: String,
#[serde(rename = "ID")]
pub id: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct LegalHold {
pub status: LegalHoldStatus,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct ListAllMyBucketsResult {
#[serde(default)]
pub buckets: Buckets,
pub owner: Owner,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct ListBucketResult {
pub name: String,
pub prefix: String,
pub key_count: usize,
pub max_keys: usize,
#[serde(default)]
pub delimiter: String,
pub is_truncated: bool,
pub start_after: Option<String>,
#[serde(default)]
pub contents: Vec<Object>,
#[serde(default)]
pub common_prefixes: Vec<CommonPrefix>,
#[serde(default)]
pub next_continuation_token: String,
#[serde(default)]
pub continuation_token: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct ListMultipartUploadsResult {
pub bucket: String,
pub key_marker: String,
pub upload_id_marker: String,
pub next_key_marker: String,
pub prefix: String,
pub delimiter: String,
pub next_upload_id_marker: String,
pub max_uploads: usize,
pub is_truncated: bool,
#[serde(default, rename = "Upload")]
pub uploads: Vec<MultipartUpload>,
#[serde(default)]
pub common_prefixes: Vec<CommonPrefix>,
pub encoding_type: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct ListPartsResult {
pub bucket: String,
pub key: String,
pub upload_id: String,
pub part_number_marker: usize,
pub max_parts: usize,
pub next_part_number_marker: usize,
pub is_truncated: bool,
#[serde(default, rename = "Part")]
pub parts: Vec<Part>,
pub storage_class: String,
pub checksum_algorithm: String,
pub initiator: Initiator,
pub owner: Owner,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct ListVersionsResult {
pub is_truncated: bool,
#[serde(default)]
pub common_prefixes: Vec<CommonPrefix>,
#[serde(default, rename = "Version")]
pub versions: Vec<ObjectVersion>,
#[serde(default, rename = "DeleteMarker")]
pub delete_markers: Vec<DeleteMarkerEntry>,
pub name: String,
pub prefix: String,
pub max_keys: usize,
#[serde(default)]
pub delimiter: String,
pub encoding_type: Option<String>,
#[serde(default)]
pub key_marker: String,
#[serde(default)]
pub next_key_marker: String,
#[serde(default)]
pub version_id_marker: String,
#[serde(default)]
pub next_version_id_marker: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct LocationConstraint {
pub location_constraint: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct MultipartUpload {
pub checksum_algorithm: String,
pub upload_id: String,
pub storage_class: String,
pub key: String,
pub initiated: String,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Object {
pub key: String,
pub last_modified: String,
pub e_tag: String,
pub size: u64,
pub storage_class: String,
pub owner: Option<Owner>,
pub checksum_algorithm: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
#[serde(rename_all = "PascalCase")]
pub struct ObjectLockRule {
pub default_retention: DefaultRetention,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct ObjectLockConfiguration {
pub object_lock_enabled: String,
pub rule: Option<ObjectLockRule>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct ObjectVersion {
pub key: String,
pub last_modified: String,
pub is_latest: bool,
pub e_tag: String,
pub size: u64,
pub storage_class: String,
pub owner: Option<Owner>,
pub version_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Owner {
pub display_name: String,
#[serde(rename = "ID")]
pub id: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Part {
pub e_tag: String,
pub part_number: usize,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Progress {
pub bytes_processed: u64,
pub bytes_returned: u64,
pub bytes_scanned: u64,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct PublicAccessBlockConfiguration {
pub block_public_acls: bool,
pub block_public_policy: bool,
pub ignore_public_acls: bool,
pub restrict_public_buckets: bool,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct ReplicationConfiguration {
pub role: String,
#[serde(rename = "Rule", default)]
pub rules: Vec<ReplicationRule>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct ReplicationRule {
pub role: String,
pub id: Option<String>,
pub priority: Option<i64>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Retention {
pub mode: RetentionMode,
#[serde(deserialize_with = "crate::time::deserialize_with_str")]
pub retain_until_date: UtcTime,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct ServerSideEncryptionByDefault {
#[serde(rename = "SSEAlgorithm")]
pub ssealgorithm: String,
#[serde(rename = " KMSMasterKeyID")]
pub kmsmaster_key_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct ServerSideEncryptionConfiguration {
#[serde(rename = "Rule")]
pub rules: Vec<ServerSideEncryptionRule>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct ServerSideEncryptionRule {
pub apply_server_side_encryption_by_default: ServerSideEncryptionByDefault,
#[serde(default)]
pub bucket_key_enabled: bool,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Stats {
pub bytes_processed: u64,
pub bytes_returned: u64,
pub bytes_scanned: u64,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Tag {
pub key: String,
pub value: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct TagSet {
#[serde(rename = "Tag", default)]
pub tags: Vec<Tag>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct Tagging {
pub tag_set: TagSet,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "PascalCase")]
pub struct VersioningConfiguration {
pub mfa_delete: Option<MFADelete>,
pub status: Option<VersioningStatus>,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub enum ChecksumAlgorithm {
CRC32,
CRC32C,
SHA1,
SHA256,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub enum GranteeType {
CanonicalUser,
AmazonCustomerByEmail,
Group,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub enum MFADelete {
Enabled,
Disabled,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub enum LegalHoldStatus {
ON,
OFF,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Default)]
pub enum RetentionMode {
#[default]
GOVERNANCE,
COMPLIANCE,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub enum Permission {
FULL_CONTROL,
WRITE,
WRITE_ACP,
READ,
READ_ACP,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub enum Status {
Enabled,
Disabled,
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
pub enum VersioningStatus {
Enabled,
Suspended,
}