use serde::{Deserialize, Serialize};
#[derive(Copy, Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
pub enum BucketAcl {
#[serde(rename = "public-read-write")]
PublicReadWrite,
#[serde(rename = "public-read")]
PublicRead,
#[default]
#[serde(rename = "private")]
Private,
}
impl BucketAcl {
pub fn as_str(&self) -> &'static str {
match self {
BucketAcl::PublicReadWrite => "public-read-write",
BucketAcl::PublicRead => "public-read",
BucketAcl::Private => "private",
}
}
}
impl AsRef<str> for BucketAcl {
fn as_ref(&self) -> &str {
self.as_str()
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
pub enum ObjectAcl {
#[default]
#[serde(rename = "default")]
Default,
#[serde(rename = "public-read-write")]
PublicReadWrite,
#[serde(rename = "public-read")]
PublicRead,
#[serde(rename = "private")]
Private,
}
impl ObjectAcl {
pub fn as_str(&self) -> &'static str {
match self {
ObjectAcl::Default => "default",
ObjectAcl::PublicReadWrite => "public-read-write",
ObjectAcl::PublicRead => "public-read",
ObjectAcl::Private => "private",
}
}
}
impl AsRef<str> for ObjectAcl {
fn as_ref(&self) -> &str {
self.as_str()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn bucket_acl_wire_names() {
assert_eq!(
serde_json::to_string(&BucketAcl::PublicReadWrite).unwrap(),
"\"public-read-write\""
);
assert_eq!(serde_json::to_string(&BucketAcl::PublicRead).unwrap(), "\"public-read\"");
assert_eq!(serde_json::to_string(&BucketAcl::Private).unwrap(), "\"private\"");
}
#[test]
fn bucket_acl_round_trip() {
for acl in [
BucketAcl::PublicReadWrite,
BucketAcl::PublicRead,
BucketAcl::Private,
] {
let json = serde_json::to_string(&acl).unwrap();
let back: BucketAcl = serde_json::from_str(&json).unwrap();
assert_eq!(acl, back);
}
}
#[test]
fn object_acl_wire_names() {
assert_eq!(serde_json::to_string(&ObjectAcl::Default).unwrap(), "\"default\"");
assert_eq!(serde_json::to_string(&ObjectAcl::PublicRead).unwrap(), "\"public-read\"");
}
#[test]
fn object_acl_round_trip() {
for acl in [
ObjectAcl::Default,
ObjectAcl::PublicReadWrite,
ObjectAcl::PublicRead,
ObjectAcl::Private,
] {
let s = serde_json::to_string(&acl).unwrap();
let back: ObjectAcl = serde_json::from_str(&s).unwrap();
assert_eq!(acl, back);
}
}
}