use super::GitLabApi;
use super::converters::GitLabUser;
use crate::network::ForgeApi;
use crate::network::error;
use crate::network::net::{ApiEndpoint, Net};
use url::Url;
struct UsersSearchEndpoint<'a> {
api: &'a GitLabApi,
base_url: Url,
}
impl ApiEndpoint<GitLabApi, Vec<GitLabUser>> for UsersSearchEndpoint<'_> {
fn api(&self) -> &GitLabApi {
self.api
}
fn url(&self) -> Url {
let mut url = self.base_url.join("users").expect("Valid URL path");
url.set_query(Some("active=true&per_page=20&page=1")); url
}
}
pub async fn get_users(api: &GitLabApi, net: &Net) -> Result<Vec<GitLabUser>, error::Error> {
let base_url = api.base_url().clone();
let endpoint = UsersSearchEndpoint { api, base_url };
let mut users = net.call(&endpoint).await?;
users.sort_by(|a, b| a.username.to_lowercase().cmp(&b.username.to_lowercase()));
Ok(users)
}