use crate::config;
use crate::network;
use crate::network::*;
use crate::network::responses::*;
use url::Url;
use windmark::response::Response;
pub fn handler(cfg: &config::Config) -> Result<Response, network::error::Error> {
let platform_url: &Url = &cfg.forge_url;
let api_url: Url = platform_url.join("api/v1/").unwrap(); let platform_name = platform_url.host_str();
println!("Forgejo API URL is {}", api_url.as_str());
let version_url: Url = api_url.join("version").unwrap(); let version_obj: Version = get(version_url)?;
println!("Forgejo {}", version_obj.version);
let users_url: Url = api_url.join("users/search").unwrap(); println!("Getting users from {}...", users_url.as_str());
let users_json: UsersSearch = get(users_url)?;
let mut users: Vec<User> = users_json.data;
users.sort_by(|a: &User, b: &User| {
return a.login.to_lowercase().cmp(&b.login.to_lowercase());
});
let user_names: Vec<String> = users.iter()
.map(super::templates::user_link)
.collect();
let gemtext_list: String = user_names.iter()
.map(|n: &String| format!("{}\n", n))
.collect::<Vec<String>>()
.concat();
let gemtext = format!("Found {} users at {}:\n{}", users.len(), platform_name.unwrap(), gemtext_list);
return Ok(Response::success(gemtext));
}