diff --git a/src/hetzner_api.rs b/src/hetzner_api.rs index 3fa8514..dea3c84 100644 --- a/src/hetzner_api.rs +++ b/src/hetzner_api.rs @@ -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, Box> { - 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 = 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> {