Documentation
use std::fmt;

use serde::{Deserialize, Serialize};

#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub enum Payer {
		#[default]
    BucketOwner,
    Requester,
}

impl fmt::Display for Payer {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            Self::BucketOwner => write!(f, "{}", "BucketOwner"),
            Self::Requester => write!(f, "{}", "Requester"),
        }
    }
}

#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct RequestPaymentConfiguration {
		#[serde(rename="Payer")]
    pub payer: Payer
}

#[cfg(test)]
pub mod tests {
    use super::RequestPaymentConfiguration;

	#[test]
	fn request_payment_configuration() {
		let xml_content = r#"<?xml version="1.0" encoding="UTF-8"?>
<RequestPaymentConfiguration>
	<Payer>BucketOwner</Payer>
</RequestPaymentConfiguration>"#;
		let obj:RequestPaymentConfiguration = quick_xml::de::from_str(&xml_content).unwrap();
		assert_eq!("BucketOwner", &obj.payer.to_string());
	}

}