in core/src/services/ftp/backend.rs [116:174]
fn build(&mut self) -> Result<Self::Accessor> {
debug!("ftp backend build started: {:?}", &self);
let endpoint = match &self.endpoint {
None => return Err(Error::new(ErrorKind::ConfigInvalid, "endpoint is empty")),
Some(v) => v,
};
let endpoint_uri = match endpoint.parse::<Uri>() {
Err(e) => {
return Err(Error::new(ErrorKind::ConfigInvalid, "endpoint is invalid")
.with_context("endpoint", endpoint)
.set_source(e));
}
Ok(uri) => uri,
};
let host = endpoint_uri.host().unwrap_or("127.0.0.1");
let port = endpoint_uri.port_u16().unwrap_or(21);
let endpoint = format!("{host}:{port}");
let enable_secure = match endpoint_uri.scheme_str() {
Some("ftp") => false,
// if the user forgot to add a scheme prefix
// treat it as using secured scheme
Some("ftps") | None => true,
Some(s) => {
return Err(Error::new(
ErrorKind::ConfigInvalid,
"endpoint is unsupported or invalid",
)
.with_context("endpoint", s));
}
};
let root = normalize_root(&self.root.take().unwrap_or_default());
let user = match &self.user {
None => "".to_string(),
Some(v) => v.clone(),
};
let password = match &self.password {
None => "".to_string(),
Some(v) => v.clone(),
};
debug!("ftp backend finished: {:?}", &self);
Ok(FtpBackend {
endpoint,
root,
user,
password,
enable_secure,
pool: OnceCell::new(),
})
}