use object_store::gcp::GoogleCloudStorageBuilder;
use polars_io::cloud::{CloudOptions, GoogleConfigKey};
struct GoogleOptionsBuilder {
builder: GoogleCloudStorageBuilder,
}
impl GoogleOptionsBuilder {
fn new() -> Self {
Self {
builder: GoogleCloudStorageBuilder::new(),
}
}
fn get_config_value(&self, key: GoogleConfigKey) -> Option<(GoogleConfigKey, String)> {
self.builder.get_config_value(&key).map(|v| (key, v))
}
}
pub(crate) fn build_cloud_options() -> Result<CloudOptions, nu_protocol::ShellError> {
let builder = GoogleOptionsBuilder::new();
let configs = vec![
GoogleConfigKey::ServiceAccount,
GoogleConfigKey::ServiceAccountKey,
GoogleConfigKey::Bucket,
]
.into_iter()
.filter_map(|key| builder.get_config_value(key))
.collect::<Vec<(GoogleConfigKey, String)>>();
Ok(CloudOptions::default().with_gcp(configs))
}