use super::ForgejoApi;
use crate::network::ForgeApi;
use crate::network::net::{ApiEndpoint, Net};
use crate::network::{error, responses::Repo, responses::RepoSearch};
use url::Url;
struct ReposSearchEndpoint<'a> {
api: &'a ForgejoApi,
base_url: Url,
}
impl ApiEndpoint<ForgejoApi, RepoSearch> for ReposSearchEndpoint<'_> {
fn api(&self) -> &ForgejoApi {
self.api
}
fn url(&self) -> Url {
let mut url = self.base_url.join("repos/search").expect("Valid URL path");
url.set_query(Some("sort=updated&order=desc&limit=20")); url
}
}
pub fn get_recent_repos(api: &ForgejoApi, net: &Net) -> Result<Vec<Repo>, error::Error> {
let base_url = api.base_url().clone();
let endpoint = ReposSearchEndpoint { api, base_url };
let repos_json = net.call(&endpoint)?;
let mut repos = repos_json.data;
repos.sort_by(|a, b| {
return b.updated_at.cmp(&a.updated_at);
});
return Ok(repos);
}