enumerate_remote function & applied to clone

This commit is contained in:
grimhilt
2023-07-21 14:45:45 +02:00
parent 30004ebd8b
commit 0832100d83
4 changed files with 97 additions and 73 deletions

50
src/utils/remote.rs Normal file
View File

@@ -0,0 +1,50 @@
use crate::services::{req_props::ObjProps, api::ApiError};
pub fn enumerate_remote(req: impl Fn(&str) -> Result<Vec<ObjProps>, ApiError>) -> (Vec<ObjProps>, Vec<ObjProps>) {
let mut folders: Vec<ObjProps> = vec![ObjProps::new()];
let mut all_folders: Vec<ObjProps> = vec![];
let mut files: Vec<ObjProps> = vec![];
while folders.len() > 0 {
let folder = folders.pop().unwrap();
let relative_s = match folder.relative_s {
Some(relative_s) => relative_s,
None => String::from(""),
};
// request folder content
let res = req(relative_s.as_str());
let objs = match res {
Ok(o) => o,
Err(ApiError::IncorrectRequest(err)) => {
eprintln!("fatal: {}", err.status());
std::process::exit(1);
},
Err(ApiError::EmptyError(_)) => {
eprintln!("Failed to get body");
vec![]
}
Err(ApiError::RequestError(err)) => {
eprintln!("fatal: {}", err);
std::process::exit(1);
},
Err(ApiError::Unexpected(_)) => todo!()
};
// find folders and files in response
let mut iter = objs.iter();
iter.next(); // jump first element which is the folder cloned
for object in iter {
if object.is_dir() {
folders.push(object.clone());
all_folders.push(object.clone());
} else {
files.push(object.clone());
}
}
}
(all_folders, files)
}