Skip to main content

apify_client/clients/
build_collection.rs

1//! Client for an Actor-build collection (`/v2/actor-builds`, `/v2/actors/{id}/builds`).
2
3use crate::clients::base::{list_resource, ResourceContext};
4use crate::clients::pagination::{list_iterator, ListIterator};
5use crate::common::{ListOptions, PaginationList, QueryParams};
6use crate::error::ApifyClientResult;
7use crate::http_client::HttpClient;
8use crate::models::Build;
9
10/// Client for listing Actor builds.
11#[derive(Debug, Clone)]
12pub struct BuildCollectionClient {
13    ctx: ResourceContext,
14}
15
16impl BuildCollectionClient {
17    pub(crate) fn new(http: HttpClient, base_url: &str) -> Self {
18        Self {
19            ctx: ResourceContext::collection(http, base_url, "actor-builds"),
20        }
21    }
22
23    /// Creates a build collection client nested under another resource (e.g. an Actor).
24    pub(crate) fn with_base(http: HttpClient, base_url: &str, resource_path: &str) -> Self {
25        Self {
26            ctx: ResourceContext::collection(http, base_url, resource_path),
27        }
28    }
29
30    /// Lists builds with offset/limit pagination.
31    pub async fn list(&self, options: ListOptions) -> ApifyClientResult<PaginationList<Build>> {
32        let mut params = QueryParams::new();
33        params
34            .add_int("offset", options.offset)
35            .add_int("limit", options.limit)
36            .add_bool("desc", options.desc);
37        list_resource(&self.ctx, None, &params).await
38    }
39
40    /// Lazily iterates over all builds matching `options`, fetching pages on demand.
41    ///
42    /// `options.limit` caps the *total* number of items yielded across all pages, unlike
43    /// [`list`](Self::list) where `limit` is a single page's size. Set the per-page fetch size
44    /// with [`with_chunk_size`](crate::ListIterator::with_chunk_size); see
45    /// [`ListIterator`] for details.
46    pub fn iterate(&self, options: ListOptions) -> ListIterator<Build> {
47        list_iterator!(self, options, list)
48    }
49}