use std::fmt;
use std::path::PathBuf;
use crate::uri::Namespace;
use crate::uri::S3PackageHandle;
use crate::uri::S3Uri;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct ObjectUri {
bucket: String,
namespace: Namespace,
path: PathBuf,
version: Option<String>,
}
impl ObjectUri {
pub fn new(package_handle: S3PackageHandle, path: PathBuf) -> Self {
ObjectUri {
bucket: package_handle.bucket,
namespace: package_handle.namespace,
path,
version: None,
}
}
}
impl From<ObjectUri> for S3Uri {
fn from(uri: ObjectUri) -> S3Uri {
S3Uri {
bucket: uri.bucket.to_string(),
key: format!("{}/{}", uri.namespace, uri.path.display()),
version: uri.version,
}
}
}
impl From<&ObjectUri> for S3Uri {
fn from(uri: &ObjectUri) -> S3Uri {
S3Uri::from(uri.clone())
}
}
impl fmt::Display for ObjectUri {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", S3Uri::from(self))
}
}