in core/src/services/azdls/backend.rs [160:251]
fn build(self) -> Result<impl Access> {
debug!("backend build started: {:?}", &self);
let root = normalize_root(&self.config.root.unwrap_or_default());
debug!("backend use root {}", root);
// Handle endpoint, region and container name.
let filesystem = match self.config.filesystem.is_empty() {
false => Ok(&self.config.filesystem),
true => Err(Error::new(ErrorKind::ConfigInvalid, "filesystem is empty")
.with_operation("Builder::build")
.with_context("service", Scheme::Azdls)),
}?;
debug!("backend use filesystem {}", &filesystem);
let endpoint = match &self.config.endpoint {
Some(endpoint) => Ok(endpoint.clone()),
None => Err(Error::new(ErrorKind::ConfigInvalid, "endpoint is empty")
.with_operation("Builder::build")
.with_context("service", Scheme::Azdls)),
}?;
debug!("backend use endpoint {}", &endpoint);
let config_loader = AzureStorageConfig {
account_name: self
.config
.account_name
.clone()
.or_else(|| infer_storage_name_from_endpoint(endpoint.as_str())),
account_key: self.config.account_key.clone(),
sas_token: None,
..Default::default()
};
let cred_loader = AzureStorageLoader::new(config_loader);
let signer = AzureStorageSigner::new();
Ok(AzdlsBackend {
core: Arc::new(AzdlsCore {
info: {
let am = AccessorInfo::default();
am.set_scheme(Scheme::Azdls)
.set_root(&root)
.set_name(filesystem)
.set_native_capability(Capability {
stat: true,
stat_has_cache_control: true,
stat_has_content_length: true,
stat_has_content_type: true,
stat_has_content_encoding: true,
stat_has_content_range: true,
stat_has_etag: true,
stat_has_content_md5: true,
stat_has_last_modified: true,
stat_has_content_disposition: true,
read: true,
write: true,
write_can_append: true,
write_with_if_none_match: true,
write_with_if_not_exists: true,
create_dir: true,
delete: true,
rename: true,
list: true,
list_has_etag: true,
list_has_content_length: true,
list_has_last_modified: true,
shared: true,
..Default::default()
});
// allow deprecated api here for compatibility
#[allow(deprecated)]
if let Some(client) = self.http_client {
am.update_http_client(|_| client);
}
am.into()
},
filesystem: self.config.filesystem.clone(),
root,
endpoint,
loader: cred_loader,
signer,
}),
})
}