remora/crates/remora-object-source/src/config.rs

84 lines
2.2 KiB
Rust
Raw Normal View History

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()
}
}