use super::ForgejoApi;
use crate::network::get::{call, ApiEndpoint};
use crate::network::ForgeApi;
use crate::network::{error, responses::Repo};
use url::Url;
struct UserReposEndpoint {
base_url: Url,
username: String,
}
impl ApiEndpoint<Vec<Repo>> for UserReposEndpoint {
fn url(&self) -> Url {
let username = &self.username;
return self
.base_url
.join(&format!("users/{username}/repos"))
.unwrap();
}
}
pub fn get_user_repos(api: &ForgejoApi, username: &str) -> Result<Vec<Repo>, error::Error> {
let base_url = api.base_url().clone();
let endpoint = UserReposEndpoint {
base_url,
username: String::from(username),
};
let mut repos = call(&endpoint)?;
repos.sort_by(|a: &Repo, b: &Repo| {
return b.updated_at.cmp(&a.updated_at);
});
return Ok(repos);
}