use super::converters::GitLabUser;
use super::GitLabApi;
use crate::network::error;
use crate::network::get::{call, ApiEndpoint, Headers};
use crate::network::ForgeApi;
use secrecy::SecretString;
use url::Url;
struct UsersSearchEndpoint<'a> {
base_url: Url,
private_token: &'a Option<SecretString>,
}
impl ApiEndpoint<Vec<GitLabUser>> for UsersSearchEndpoint<'_> {
fn url(&self) -> Url {
let mut url = self.base_url.join("users").unwrap();
url.set_query(Some("active=true&per_page=12&page=1"));
return url;
}
fn headers(&self) -> Headers {
if let Some(private_token) = self.private_token {
return Headers::from([(String::from("Private-Token"), private_token)]);
} else {
return Headers::new();
}
}
}
pub fn get_users(api: &GitLabApi) -> Result<Vec<GitLabUser>, error::Error> {
let base_url = api.base_url().clone();
let private_token = api.private_token();
let endpoint = UsersSearchEndpoint {
base_url,
private_token,
};
let mut users = call(&endpoint)?;
users.sort_by(|a, b| {
return a.username.to_lowercase().cmp(&b.username.to_lowercase());
});
return Ok(users);
}