in core/src/services/seafile/backend.rs [152:231]
fn build(self) -> Result<impl Access> {
debug!("backend build started: {:?}", &self);
let root = normalize_root(&self.config.root.clone().unwrap_or_default());
debug!("backend use root {}", &root);
// Handle bucket.
if self.config.repo_name.is_empty() {
return Err(Error::new(ErrorKind::ConfigInvalid, "repo_name is empty")
.with_operation("Builder::build")
.with_context("service", Scheme::Seafile));
}
debug!("backend use repo_name {}", &self.config.repo_name);
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::Seafile)),
}?;
let username = match &self.config.username {
Some(username) => Ok(username.clone()),
None => Err(Error::new(ErrorKind::ConfigInvalid, "username is empty")
.with_operation("Builder::build")
.with_context("service", Scheme::Seafile)),
}?;
let password = match &self.config.password {
Some(password) => Ok(password.clone()),
None => Err(Error::new(ErrorKind::ConfigInvalid, "password is empty")
.with_operation("Builder::build")
.with_context("service", Scheme::Seafile)),
}?;
Ok(SeafileBackend {
core: Arc::new(SeafileCore {
info: {
let am = AccessorInfo::default();
am.set_scheme(Scheme::Seafile)
.set_root(&root)
.set_native_capability(Capability {
stat: true,
stat_has_content_length: true,
stat_has_last_modified: true,
read: true,
write: true,
write_can_empty: true,
delete: true,
list: 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()
},
root,
endpoint,
username,
password,
repo_name: self.config.repo_name.clone(),
signer: Arc::new(RwLock::new(SeafileSigner::default())),
}),
})
}