account for pagination when listing all servers

This commit is contained in:
Maxime Van Hees 2025-07-15 11:10:14 +02:00
parent a6c102aabf
commit 92e8ac6d16

View File

@ -1,4 +1,4 @@
use hcloud::apis::{configuration::Configuration, servers_api};
use hcloud::apis::{configuration::Configuration, servers_api::{self, ListServersParams}};
use hcloud::models::Server;
#[derive(Debug, Clone)]
@ -24,14 +24,33 @@ impl HetznerClient {
}
pub async fn list_servers(&self) -> Result<Vec<WrappedServer>, Box<dyn std::error::Error>> {
let servers = servers_api::list_servers(&self.configuration, Default::default())
.await?
.servers
.into_iter()
.map(WrappedServer)
.collect();
let mut all_servers = Vec::new();
let mut page = 1;
let per_page = 50;
Ok(servers)
loop {
let params = ListServersParams {
page: Some(page),
per_page: Some(per_page),
..Default::default()
};
let response = servers_api::list_servers(&self.configuration, params).await?;
let mut servers: Vec<WrappedServer> = response.servers.into_iter().map(WrappedServer).collect();
let is_empty = servers.is_empty();
all_servers.append(&mut servers);
println!("next page? {:#?}", response.meta);
if is_empty || response.meta.pagination.next_page.is_none() {
break;
}
page += 1;
}
Ok(all_servers)
}
pub async fn get_server_status(&self, server_id: i64) -> Result<String, Box<dyn std::error::Error>> {