diff --git a/src/commands/service_catalog.rs b/src/commands/service_catalog.rs index 8f59b6a8..df257baa 100644 --- a/src/commands/service_catalog.rs +++ b/src/commands/service_catalog.rs @@ -6,10 +6,14 @@ use datadog_api_client::datadogV2::api_service_definition::{ use crate::config::Config; use crate::formatter; -pub async fn list(cfg: &Config) -> Result<()> { +pub async fn list(cfg: &Config, page_size: i64, page_number: i64) -> Result<()> { let api = crate::make_api!(ServiceDefinitionAPI, cfg); let resp = api - .list_service_definitions(ListServiceDefinitionsOptionalParams::default()) + .list_service_definitions( + ListServiceDefinitionsOptionalParams::default() + .page_size(page_size) + .page_number(page_number), + ) .await .map_err(|e| anyhow::anyhow!("failed to list services: {e:?}"))?; formatter::output(cfg, &resp) @@ -38,7 +42,17 @@ mod tests { let mut s = mockito::Server::new_async().await; let cfg = test_config(&s.url()); mock_all(&mut s, r#"{"data": []}"#).await; - let _ = super::list(&cfg).await; + let _ = super::list(&cfg, 10, 0).await; + cleanup_env(); + } + + #[tokio::test] + async fn test_service_catalog_list_with_pagination() { + let _lock = lock_env().await; + let mut s = mockito::Server::new_async().await; + let cfg = test_config(&s.url()); + mock_all(&mut s, r#"{"data": []}"#).await; + let _ = super::list(&cfg, 50, 2).await; cleanup_env(); } diff --git a/src/main.rs b/src/main.rs index 13c9c610..59d53025 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6212,7 +6212,12 @@ enum CaseNotificationRuleActions { #[derive(Subcommand)] enum ServiceCatalogActions { /// List services - List, + List { + #[arg(long, default_value_t = 10, help = "Results per page (max 100)")] + page_size: i64, + #[arg(long, default_value_t = 0, help = "Page number (0-indexed)")] + page_number: i64, + }, /// Get service details Get { service_name: String }, } @@ -14682,7 +14687,10 @@ async fn main_inner() -> anyhow::Result<()> { Commands::ServiceCatalog { action } => { cfg.validate_auth()?; match action { - ServiceCatalogActions::List => commands::service_catalog::list(&cfg).await?, + ServiceCatalogActions::List { + page_size, + page_number, + } => commands::service_catalog::list(&cfg, page_size, page_number).await?, ServiceCatalogActions::Get { service_name } => { commands::service_catalog::get(&cfg, &service_name).await?; }