in core/src/services/http/backend.rs [135:207]
fn build(self) -> Result<impl Access> {
debug!("backend build started: {:?}", &self);
let endpoint = match &self.config.endpoint {
Some(v) => v,
None => {
return Err(Error::new(ErrorKind::ConfigInvalid, "endpoint is empty")
.with_context("service", Scheme::Http))
}
};
let root = normalize_root(&self.config.root.unwrap_or_default());
debug!("backend use root {}", root);
let mut auth = None;
if let Some(username) = &self.config.username {
auth = Some(format_authorization_by_basic(
username,
self.config.password.as_deref().unwrap_or_default(),
)?);
}
if let Some(token) = &self.config.token {
auth = Some(format_authorization_by_bearer(token)?)
}
let info = AccessorInfo::default();
info.set_scheme(Scheme::Http)
.set_root(&root)
.set_native_capability(Capability {
stat: true,
stat_with_if_match: true,
stat_with_if_none_match: 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,
read_with_if_match: true,
read_with_if_none_match: true,
presign: auth.is_none(),
presign_read: auth.is_none(),
presign_stat: auth.is_none(),
shared: true,
..Default::default()
});
// allow deprecated api here for compatibility
#[allow(deprecated)]
if let Some(client) = self.http_client {
info.update_http_client(|_| client);
}
let accessor_info = Arc::new(info);
let core = Arc::new(HttpCore {
info: accessor_info,
endpoint: endpoint.to_string(),
root,
authorization: auth,
});
Ok(HttpBackend { core })
}