use crate::error::Result;
use opendal::Configurator;
use opendal::Operator;
use opendal::layers::TimeoutLayer;
use opendal::services::S3Config;
use std::collections::HashMap;
use std::time::Duration;
pub(crate) fn s3_config_build(props: &HashMap<String, String>) -> Result<Operator> {
let config = S3Config::from_iter(props.clone())?;
let op = Operator::from_config(config)?.finish();
let timeout_layer = TimeoutLayer::new()
.with_timeout(Duration::from_secs(10))
.with_io_timeout(Duration::from_secs(30));
Ok(op.layer(timeout_layer))
}
pub(crate) fn parse_s3_path(path: &str) -> (&str, &str) {
let path = path
.strip_prefix("s3a://")
.or_else(|| path.strip_prefix("s3://"))
.unwrap_or(path);
match path.find('/') {
Some(idx) => (&path[..idx], &path[idx + 1..]),
None => (path, ""),
}
}