use s3::Region;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub struct S3Region {
pub endpoint: String,
pub region: String,
}
impl S3Region {
pub fn new(endpoint: String, region: String) -> Self {
Self { endpoint, region }
}
pub fn endpoint(&self) -> String {
self.endpoint.clone()
}
pub fn region(&self) -> String {
self.region.clone()
}
pub fn update_endpoint(&mut self, endpoint: String) -> &Self {
self.endpoint = endpoint;
self
}
pub fn update_region(&mut self, region: String) -> &Self {
self.region = region;
self
}
}
impl Default for S3Region {
fn default() -> Self {
Self::new(
"https://gateway.storjshare.io".to_string(),
"us-east-1".to_string(),
)
}
}
impl std::fmt::Display for S3Region {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", serde_json::to_string(&self).unwrap())
}
}
impl std::convert::From<(&str, &str)> for S3Region {
fn from(data: (&str, &str)) -> Self {
Self::new(data.0.to_string(), data.1.to_string())
}
}
impl std::convert::From<&Region> for S3Region {
fn from(data: &Region) -> Self {
Self::new(data.clone().endpoint(), data.clone().host())
}
}
impl std::convert::From<&S3Region> for Region {
fn from(data: &S3Region) -> Self {
Self::Custom {
endpoint: data.clone().endpoint,
region: data.clone().region,
}
}
}