use std::str::FromStr;
use std::str;
use std::time::Duration; use chrono::{UTC, DateTime};
use aws::common::xmlutil::*;
use aws::common::params::*;
pub type Body = Vec<u8>;
pub type MaxKeys = i32;
pub type KeyCount = i32;
pub type URI = String;
pub type ID = String;
pub type Type = String;
pub type EmailAddress = String;
pub type DisplayName = String;
pub type Code = String;
pub type HostId = String;
pub type RequestId = String;
pub type Resource = String;
pub type Value = String;
pub type SkipElement = String;
pub type IsTruncated = bool;
pub type StartAfter = String;
pub type ContinuationToken = String;
pub type Quiet = bool;
pub struct BodyParser;
pub struct BodyWriter;
pub struct MaxKeysParser;
pub struct MaxKeysWriter;
pub struct KeyCountParser;
pub struct KeyCountWriter;
pub struct URIParser;
pub struct URIWriter;
pub struct IDParser;
pub struct IDWriter;
pub struct TypeParser;
pub struct TypeWriter;
pub struct EmailAddressParser;
pub struct EmailAddressWriter;
pub struct DisplayNameParser;
pub struct DisplayNameWriter;
pub struct OwnerParser;
pub struct OwnerWriter;
pub struct CodeParser;
pub struct CodeWriter;
pub struct HostIdParser;
pub struct HostIdWriter;
pub struct RequestIdParser;
pub struct RequestIdWriter;
pub struct ResourceParser;
pub struct ResourceWriter;
pub struct ValueParser;
pub struct ValueWriter;
pub struct SkipElementParser;
pub struct IsTruncatedParser;
pub struct IsTruncatedWriter;
pub struct ContinuationTokenParser;
pub struct ContinuationTokenWriter;
pub struct StartAfterParser;
pub struct StartAfterWriter;
pub struct QuietParser;
pub struct QuietWriter;
#[derive(Debug, Default, RustcDecodable, RustcEncodable)]
pub struct Owner {
pub display_name: DisplayName,
pub id: ID,
}
#[derive(Debug, Default, Clone)]
pub struct Operation {
pub request: String,
pub endpoint: String,
pub method: String,
pub success: bool,
pub code: u16,
pub payload_size: u64,
pub start_time: Option<DateTime<UTC>>,
pub end_time: Option<DateTime<UTC>>,
pub duration: Option<Duration>,
pub object: String,
}
impl BodyParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<Body, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack)).into_bytes();
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl BodyWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &Body) {
params.put(name, str::from_utf8(obj).unwrap());
}
}
impl MaxKeysParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<MaxKeys, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = i32::from_str(try!(characters(stack)).as_ref()).unwrap();
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl MaxKeysWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &MaxKeys) {
params.put(name, &obj.to_string());
}
}
impl KeyCountParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<KeyCount, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = i32::from_str(try!(characters(stack)).as_ref()).unwrap();
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl KeyCountWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &KeyCount) {
params.put(name, &obj.to_string());
}
}
impl URIParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<URI, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl URIWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &URI) {
params.put(name, obj);
}
}
impl IDParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<ID, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl IDWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &ID) {
params.put(name, obj);
}
}
impl TypeParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<Type, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl TypeWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &Type) {
params.put(name, obj);
}
}
impl EmailAddressParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<EmailAddress, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl EmailAddressWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &EmailAddress) {
params.put(name, obj);
}
}
impl DisplayNameParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<DisplayName, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl DisplayNameWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &DisplayName) {
params.put(name, obj);
}
}
impl OwnerParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<Owner, XmlParseError> {
try!(start_element(tag_name, stack));
let mut obj = Owner::default();
loop {
let current_name = try!(peek_at_name(stack));
match current_name.as_ref() {
"DisplayName" => {
obj.display_name = try!(DisplayNameParser::parse_xml("DisplayName", stack));
continue;
},
"ID" => {
obj.id = try!(IDParser::parse_xml("ID", stack));
continue;
},
_ => break,
}
}
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl OwnerWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &Owner) {
let mut prefix = name.to_string();
if prefix != "" { prefix.push_str("."); }
DisplayNameWriter::write_params(params, &(prefix.to_string() + "DisplayName"), &obj.display_name);
IDWriter::write_params(params, &(prefix.to_string() + "ID"), &obj.id);
}
}
impl CodeParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<Code, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl CodeWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &Code) {
params.put(name, obj);
}
}
impl HostIdParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<HostId, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl HostIdWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &Code) {
params.put(name, obj);
}
}
impl RequestIdParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<RequestId, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl RequestIdWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &Code) {
params.put(name, obj);
}
}
impl ResourceParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<Resource, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl ResourceWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &Code) {
params.put(name, obj);
}
}
impl ValueParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<Value, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl ValueWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &Value) {
params.put(name, obj);
}
}
impl SkipElementParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<SkipElement, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(format!("<{}>{}</{}>", tag_name, obj, tag_name))
}
}
impl IsTruncatedParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<IsTruncated, XmlParseError> {
try!(start_element(tag_name, stack));
let mut obj = IsTruncated::default();
match characters(stack) {
Err(_) => return Ok(obj),
Ok(ref chars) => obj = bool::from_str(chars).unwrap(),
}
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl IsTruncatedWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &IsTruncated) {
params.put(name, &obj.to_string());
}
}
impl ContinuationTokenParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<ContinuationToken, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl ContinuationTokenWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &ContinuationToken) {
params.put(name, obj);
}
}
impl StartAfterParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<StartAfter, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = try!(characters(stack));
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl StartAfterWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &StartAfter) {
params.put(name, obj);
}
}
impl QuietParser {
pub fn parse_xml<T: Peek + Next>(tag_name: &str, stack: &mut T) -> Result<Quiet, XmlParseError> {
try!(start_element(tag_name, stack));
let obj = bool::from_str(try!(characters(stack)).as_ref()).unwrap();
try!(end_element(tag_name, stack));
Ok(obj)
}
}
impl QuietWriter {
pub fn write_params(params: &mut Params, name: &str, obj: &Quiet) {
params.put(name, &obj.to_string());
}
}