use smol_str::SmolStr;
use crate::pds_discovery::{ListHostsOutput, ListedHost};
use super::*;
#[derive(Deserialize)]
pub struct ListHosts {
pub cursor: Option<SmolStr>,
pub limit: Option<i64>,
}
pub async fn handle(
State(hydrant): State<Hydrant>,
ExtractXrpc(req): ExtractXrpc<ListHosts>,
) -> XrpcResult<Json<ListHostsOutput>> {
let limit = req.limit.unwrap_or(200).clamp(1, 1000) as usize;
let (hosts, cursor) = hydrant
.list_hosts(req.cursor.as_deref(), limit)
.await
.map_err(internal_error)?;
Ok(Json(ListHostsOutput {
cursor,
hosts: hosts
.into_iter()
.map(|h| ListedHost {
hostname: h.name,
seq: Some(h.seq),
status: Some(h.status.as_str().into()),
account_count: Some(h.account_count as i64),
})
.collect(),
}))
}