84 lines
2.2 KiB
Rust
84 lines
2.2 KiB
Rust
|
|
use std::fmt;
|
||
|
|
|
||
|
|
use remora_outbound::CanonicalUrl;
|
||
|
|
use remora_target::TargetStoreConfig;
|
||
|
|
|
||
|
|
use crate::ObjectSourceError;
|
||
|
|
|
||
|
|
#[derive(Clone, Eq, PartialEq)]
|
||
|
|
pub struct ObjectSourceConfig {
|
||
|
|
endpoint: CanonicalUrl,
|
||
|
|
bucket: String,
|
||
|
|
region: String,
|
||
|
|
access_key_id: String,
|
||
|
|
secret_access_key: String,
|
||
|
|
}
|
||
|
|
|
||
|
|
impl ObjectSourceConfig {
|
||
|
|
pub fn new(
|
||
|
|
endpoint: &str,
|
||
|
|
bucket: impl Into<String>,
|
||
|
|
region: impl Into<String>,
|
||
|
|
access_key_id: impl Into<String>,
|
||
|
|
secret_access_key: impl Into<String>,
|
||
|
|
) -> Result<Self, ObjectSourceError> {
|
||
|
|
let endpoint =
|
||
|
|
CanonicalUrl::parse(endpoint).map_err(|_| ObjectSourceError::InvalidRequest)?;
|
||
|
|
let bucket = bucket.into();
|
||
|
|
let region = region.into();
|
||
|
|
let access_key_id = access_key_id.into();
|
||
|
|
let secret_access_key = secret_access_key.into();
|
||
|
|
if bucket.is_empty() || access_key_id.is_empty() || secret_access_key.is_empty() {
|
||
|
|
return Err(ObjectSourceError::InvalidRequest);
|
||
|
|
}
|
||
|
|
Ok(Self {
|
||
|
|
endpoint,
|
||
|
|
bucket,
|
||
|
|
region,
|
||
|
|
access_key_id,
|
||
|
|
secret_access_key,
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn from_target(config: &TargetStoreConfig) -> Result<Self, ObjectSourceError> {
|
||
|
|
Self::new(
|
||
|
|
&config.endpoint,
|
||
|
|
config.bucket.clone(),
|
||
|
|
config.region.clone(),
|
||
|
|
config.access_key_id.clone(),
|
||
|
|
config.secret_access_key.clone(),
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
#[must_use]
|
||
|
|
pub fn endpoint(&self) -> &CanonicalUrl {
|
||
|
|
&self.endpoint
|
||
|
|
}
|
||
|
|
|
||
|
|
#[must_use]
|
||
|
|
pub fn bucket(&self) -> &str {
|
||
|
|
&self.bucket
|
||
|
|
}
|
||
|
|
|
||
|
|
pub(crate) fn region(&self) -> &str {
|
||
|
|
&self.region
|
||
|
|
}
|
||
|
|
|
||
|
|
pub(crate) fn access_key_id(&self) -> &str {
|
||
|
|
&self.access_key_id
|
||
|
|
}
|
||
|
|
|
||
|
|
pub(crate) fn secret_access_key(&self) -> &str {
|
||
|
|
&self.secret_access_key
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
impl fmt::Debug for ObjectSourceConfig {
|
||
|
|
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||
|
|
formatter
|
||
|
|
.debug_struct("ObjectSourceConfig")
|
||
|
|
.field("bucket", &self.bucket)
|
||
|
|
.field("region", &self.region)
|
||
|
|
.finish_non_exhaustive()
|
||
|
|
}
|
||
|
|
}
|