use aws::common::params::{Params, ServiceParams};
use aws::common::xmlutil::*;
use aws::common::common::*;
use aws::s3::writeparse::*;
use aws::s3::grant::*;
use aws::s3::header::*;
use aws::s3::object::*;
pub type ObjectCannedACL = String;
pub type Permission = String;
#[derive(Debug)]
pub enum CannedAcl {
Private,
PublicRead,
PublicReadWrite,
AuthenticatedRead,
BucketOwnerRead,
BucketOwnerFullControl,
}
pub struct GetBucketAclRequestParser;
pub struct GetBucketAclRequestWriter;
pub struct PutObjectAclRequestParser;
pub struct PutObjectAclRequestWriter;
pub struct AccessControlPolicyParser;
pub struct AccessControlPolicyWriter;
pub struct AccessControlListParser;
pub struct AccessControlListWriter;
pub struct ObjectCannedACLParser;
pub struct ObjectCannedACLWriter;
pub struct PermissionParser;
pub struct PermissionWriter;
#[derive(Debug, Default)]
pub struct AccessControlPolicy {
pub owner: Owner,
pub acl: AccessControlList,
}
#[derive(Debug, Default)]
pub struct AccessControlList {
pub grants: Grants,
}
#[derive(Debug, Default)]
pub struct GetBucketAclRequest {
pub bucket: BucketName,
}
#[derive(Debug, Default)]
pub struct PutBucketAclRequest {
pub grant_full_control: Option<GrantFullControl>,
pub grant_write_acp: Option<GrantWriteACP>,
pub content_md5: Option<ContentMD5>,
pub bucket: BucketName,
pub acl: Option<CannedAcl>,
pub access_control_policy: Option<AccessControlPolicy>,
pub grant_write: Option<GrantWrite>,
pub grant_read: Option<GrantRead>,
pub grant_read_acp: Option<GrantReadACP>,
}
impl PutObjectAclRequestParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<PutObjectAclRequest, XmlParseError> {
try!(start_element(tag_name, stack));
let mut obj = PutObjectAclRequest::default();
loop {
let current_name = try!(peek_at_name(stack));
if current_name == "x-amz-grant-full-control" {
obj.grant_full_control = Some(try!(GrantFullControlParser::parse_xml("x-amz-grant-full-control", stack)));
continue;
}
if current_name == "x-amz-grant-write-acp" {
obj.grant_write_acp = Some(try!(GrantWriteACPParser::parse_xml("x-amz-grant-write-acp", stack)));
continue;
}
if current_name == "Key" {
obj.key = try!(ObjectKeyParser::parse_xml("Key", stack));
continue;
}
if current_name == "x-amz-request-payer" {
obj.request_payer = Some(try!(RequestPayerParser::parse_xml("x-amz-request-payer", stack)));
continue;
}
if current_name == "Content-MD5" {
obj.content_md5 = Some(try!(ContentMD5Parser::parse_xml("Content-MD5", stack)));
continue;
}
if current_name == "Bucket" {
obj.bucket = try!(BucketNameParser::parse_xml("Bucket", stack));
continue;
}
if current_name == "AccessControlPolicy" {
obj.access_control_policy = Some(try!(AccessControlPolicyParser::parse_xml("AccessControlPolicy", stack)));
continue;
}
if current_name == "x-amz-grant-write" {
obj.grant_write = Some(try!(GrantWriteParser::parse_xml("x-amz-grant-write", stack)));
continue;
}
if current_name == "x-amz-grant-read" {
obj.grant_read = Some(try!(GrantReadParser::parse_xml("x-amz-grant-read", stack)));
continue;
}
if current_name == "x-amz-grant-read-acp" {
obj.grant_read_acp = Some(try!(GrantReadACPParser::parse_xml("x-amz-grant-read-acp", stack)));
continue;
}
break;
}
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl PutObjectAclRequestWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &PutObjectAclRequest) {
let mut prefix = name.to_string();
if prefix != "" { prefix.push_str("."); }
if let Some(ref obj) = obj.grant_full_control {
GrantFullControlWriter::write_params(params, &(prefix.to_string() + "x-amz-grant-full-control"), obj);
}
if let Some(ref obj) = obj.grant_write_acp {
GrantWriteACPWriter::write_params(params, &(prefix.to_string() + "x-amz-grant-write-acp"), obj);
}
ObjectKeyWriter::write_params(params, &(prefix.to_string() + "Key"), &obj.key);
if let Some(ref obj) = obj.request_payer {
RequestPayerWriter::write_params(params, &(prefix.to_string() + "x-amz-request-payer"), obj);
}
if let Some(ref obj) = obj.content_md5 {
ContentMD5Writer::write_params(params, &(prefix.to_string() + "Content-MD5"), obj);
}
BucketNameWriter::write_params(params, &(prefix.to_string() + "Bucket"), &obj.bucket);
if let Some(ref obj) = obj.access_control_policy {
AccessControlPolicyWriter::write_params(params, &(prefix.to_string() + "AccessControlPolicy"), obj);
}
if let Some(ref obj) = obj.grant_write {
GrantWriteWriter::write_params(params, &(prefix.to_string() + "x-amz-grant-write"), obj);
}
if let Some(ref obj) = obj.grant_read {
GrantReadWriter::write_params(params, &(prefix.to_string() + "x-amz-grant-read"), obj);
}
if let Some(ref obj) = obj.grant_read_acp {
GrantReadACPWriter::write_params(params, &(prefix.to_string() + "x-amz-grant-read-acp"), obj);
}
}
}
impl GetBucketAclRequestParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<GetBucketAclRequest, XmlParseError> {
try!(start_element(tag_name, stack));
let mut obj = GetBucketAclRequest::default();
loop {
let current_name = try!(peek_at_name(stack));
if current_name == "Bucket" {
obj.bucket = try!(BucketNameParser::parse_xml("Bucket", stack));
continue;
}
break;
}
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl GetBucketAclRequestWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &GetBucketAclRequest) {
let mut prefix = name.to_string();
if prefix != "" { prefix.push_str("."); }
BucketNameWriter::write_params(params, &(prefix.to_string() + "Bucket"), &obj.bucket);
}
}
impl AccessControlPolicyParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<AccessControlPolicy, XmlParseError> {
try!(start_element(tag_name, stack));
let mut obj = AccessControlPolicy::default();
loop {
let current_name = try!(peek_at_name(stack));
if current_name == "Owner" {
obj.owner = try!(OwnerParser::parse_xml("Owner", stack));
continue;
}
if current_name == "AccessControlList" {
obj.acl = try!(AccessControlListParser::parse_xml("AccessControlList", stack));
continue;
}
break;
}
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl AccessControlPolicyWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &AccessControlPolicy) {
let mut prefix = name.to_string();
if prefix != "" { prefix.push_str("."); }
OwnerWriter::write_params(params, &(prefix.to_string() + "Owner"), &obj.owner);
AccessControlListWriter::write_params(params, &(prefix.to_string() + "AccessControlList"), &obj.acl);
}
}
impl AccessControlListParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<AccessControlList, XmlParseError> {
try!(start_element(tag_name, stack));
let mut obj = AccessControlList::default();
loop {
let current_name = try!(peek_at_name(stack));
if current_name == "Grant" {
obj.grants = try!(GrantsParser::parse_xml("Grant", stack));
continue;
}
break;
}
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl AccessControlListWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &AccessControlList) {
let mut prefix = name.to_string();
if prefix != "" { prefix.push_str("."); }
GrantsWriter::write_params(params, &(prefix.to_string() + "Grant"), &obj.grants);
}
}
impl ObjectCannedACLParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<ObjectCannedACL, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl ObjectCannedACLWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &ObjectCannedACL) {
params.put(name, obj);
}
}
impl PermissionParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<Permission, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl PermissionWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &Permission) {
params.put(name, obj);
}
}
pub fn canned_acl_in_aws_format(canned_acl: &CannedAcl) -> String {
match *canned_acl {
CannedAcl::Private => "private".to_string(),
CannedAcl::PublicRead => "public-read".to_string(),
CannedAcl::PublicReadWrite => "public-read-write".to_string(),
CannedAcl::AuthenticatedRead => "authenticated-read".to_string(),
CannedAcl::BucketOwnerRead => "bucket-owner-read".to_string(),
CannedAcl::BucketOwnerFullControl => "bucket-owner-full-control".to_string(),
}
}