use url::Url;
use aws::common::region::Region;
#[allow(dead_code)]
#[derive(Debug, Clone)]
pub struct Endpoint {
pub region: Region,
pub signature: Signature,
pub endpoint: Option<Url>,
pub proxy: Option<Url>,
pub user_agent: Option<String>,
pub is_bucket_virtual: bool,
}
#[derive(Debug, Clone, PartialEq, RustcDecodable, RustcEncodable)]
pub enum Signature {
V2,
V4,
}
impl Endpoint {
pub fn new(region: Region,
signature: Signature,
endpoint: Option<Url>,
proxy: Option<Url>,
user_agent: Option<String>,
is_bucket_virtual: Option<bool>) -> Self {
Endpoint {
region: region,
signature: signature,
endpoint: default_endpoint(region, endpoint),
proxy: proxy,
user_agent: user_agent,
is_bucket_virtual: is_bucket_virtual.unwrap_or(true),
}
}
pub fn hostname(&self) -> Option<String> {
match self.endpoint {
None => None,
Some(ref url) => Some(url.host_str().unwrap().to_string()),
}
}
}
fn default_endpoint(region: Region, endpoint: Option<Url>) -> Option<Url> {
let final_endpoint: Url;
match endpoint {
Some(url) => final_endpoint = url,
None => {
let endpoint: String = match region {
Region::UsEast1 => "https://s3.amazonaws.com".to_string(),
Region::CnNorth1 => format!("https://s3.{}.amazonaws.com.cn", region),
_ => format!("https://s3.amazonaws.com"),
};
final_endpoint = Url::parse(&endpoint).unwrap();
},
};
Some(final_endpoint)
}