Add exact resumable object source streaming
This commit is contained in:
parent
5b43b6c660
commit
0ad79c597f
1 changed files with 1482 additions and 1 deletions
84
crates/remora-object-source/src/config.rs
Normal file
84
crates/remora-object-source/src/config.rs
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
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()
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue