Add pagination.
This commit is contained in:
parent
15e1f4dbce
commit
71f9e10600
@ -22,26 +22,38 @@ impl GiteaClient {
|
||||
owner: O,
|
||||
repo: R,
|
||||
commit: C,
|
||||
) -> Result<(), Box<dyn std::error::Error>> {
|
||||
let url = format!(
|
||||
"{api_root}/v1/repos/{owner}/{repo}/git/trees/{commit}?recursive=true&per_page=10",
|
||||
api_root = self.api_root,
|
||||
owner = owner.as_ref(),
|
||||
repo = repo.as_ref(),
|
||||
commit = commit.as_ref()
|
||||
);
|
||||
let response = self
|
||||
.http_client
|
||||
.get(url)
|
||||
.header("Authorization", format!("token {}", self.token))
|
||||
.send()
|
||||
.await?;
|
||||
let response = response.error_for_status()?;
|
||||
let body = response.text().await?;
|
||||
debug!("Response: {}", body);
|
||||
let parsed_body: ResponseGetTree = serde_json::from_str(body.as_str())?;
|
||||
println!("Response: {:#?}", parsed_body);
|
||||
Ok(())
|
||||
) -> Result<Tree, Box<dyn std::error::Error>> {
|
||||
let mut files = Vec::new();
|
||||
let mut page: Option<u64> = None;
|
||||
loop {
|
||||
let url = format!(
|
||||
"{api_root}/v1/repos/{owner}/{repo}/git/trees/{commit}?recursive=true&per_page=10{page}",
|
||||
api_root = self.api_root,
|
||||
owner = owner.as_ref(),
|
||||
repo = repo.as_ref(),
|
||||
commit = commit.as_ref(),
|
||||
page = page.map(|num| format!("&page={}", num)).unwrap_or_else(|| String::new())
|
||||
);
|
||||
let response = self
|
||||
.http_client
|
||||
.get(url)
|
||||
.header("Authorization", format!("token {}", self.token))
|
||||
.send()
|
||||
.await?;
|
||||
let response = response.error_for_status()?;
|
||||
let body = response.text().await?;
|
||||
debug!("Response: {}", body);
|
||||
let parsed_body: ResponseGetTree = serde_json::from_str(body.as_str())?;
|
||||
println!("Response: {:#?}", parsed_body);
|
||||
// TODO: Read response objects
|
||||
|
||||
if !parsed_body.truncated {
|
||||
break;
|
||||
}
|
||||
// TODO: Switch to using response headers instead of response body.
|
||||
page = Some(parsed_body.page + 1);
|
||||
}
|
||||
Ok(Tree::new(files))
|
||||
}
|
||||
}
|
||||
|
||||
@ -66,3 +78,23 @@ struct ResponseObjectReference {
|
||||
sha: String,
|
||||
url: String,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub(crate) struct Tree {
|
||||
pub(crate) files: Vec<TreeFileReference>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub(crate) struct TreeFileReference {}
|
||||
|
||||
impl Tree {
|
||||
pub(crate) fn new(files: Vec<TreeFileReference>) -> Tree {
|
||||
Tree { files: Vec::new() }
|
||||
}
|
||||
}
|
||||
|
||||
impl TreeFileReference {
|
||||
pub(crate) fn new() -> TreeFileReference {
|
||||
TreeFileReference {}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user