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