Skip to content

feat: sync Rust client with Apify OpenAPI spec v2-2026-10-08T073338Z - #28

Closed
Pijukatel wants to merge 2 commits into
masterfrom
claude/rust-client-sync-2026-10-09
Closed

Pijukatel wants to merge 2 commits into
masterfrom
claude/rust-client-sync-2026-10-09

Conversation

@Pijukatel

@Pijukatel Pijukatel commented Oct 9, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Syncs the Rust client from OpenAPI spec v2-2026-10-01T153946Z to v2-2026-10-08T073338Z (apify/apify-docs#3043, #3044, #3042) and ports the Rust-relevant changes from the reference apify-client-js batch (apify/apify-client-js#1091, #1125, #1122, #1121, #1123, #1124, #1107, #1137, #1105).

  • ActorStartOptions::wait_for_resources (new WaitForResources enum) on ActorClient/TaskClient start/call: retries a run start every 10s while the API rejects it with actor-memory-limit-exceeded/concurrent-runs-limit-exceeded (apify-client-js#1091).
  • Fixed ListIterator (every collection's iterate()/iterate_items()) to stop paging on an empty page rather than a page's reported total, so a listing that grows mid-iteration (e.g. a dataset a running Actor keeps pushing to) is read to the end. DatasetClient::iterate_items also now advances by the x-apify-pagination-count scanned-row count rather than items.len() when a filter/unwind makes them differ (apify-client-js#1125).
  • Fixed wait_for_finish to stop polling a run/build ID that keeps 404ing once a 3-second grace period elapses (reset by any successful fetch), instead of polling forever when wait_secs is None (apify-client-js#1124).

JS PRs #1122 (drop top-level restartOnError) and #1121 (narrow unwind to string[]) needed no Rust change: update() is already fully generic with no struct to narrow, and unwind has always been Option<Vec<String>>. #1107 (rename generated models to match spec schema titles) doesn't apply either — Rust's models aren't generated 1:1 from the spec. #1123/#1105 (StreamedLog stream-reopen/stop-hang fixes) patch bugs in JS's own internal log-streaming class; Rust's LogClient::stream/stream_with_options returns a plain Stream with no equivalent internal state to patch. The spec's new Profile.readme field (#3043) needs no code change — it's already reachable through the existing flatten-to-extra model pattern, and #3044 is a pure schema-title/file rename with no wire-format change.

Tests added/updated in src/clients/pagination.rs and tests/unit_http.rs (8 new cases covering wait_for_resources and the two wait_for_finish/pagination fixes, plus 7 updated/added pagination unit tests). Docs (docs/actors.md, docs/runs.md, docs/builds.md, docs/README.md) and CHANGELOG.md updated. Crate version bumped 0.11.0 → 0.12.0 (minor, new API surface).

Review

Reviewed via /review-client: one round rejected (a stale comment on dataset.rs's pagination fallback, left over from before this PR's own pagination fix), fixed in 09b3528, then Approved with no open items.

Test plan

  • cargo fmt --all -- --check
  • cargo clippy --all-targets -- -D warnings
  • cargo test --lib --tests -- --skip example_ against the live API with APIFY_TOKEN (all pass)
  • cargo test --test examples and cargo test --doc against the live API (all pass)

…-10-08T073338Z

Adds ActorStartOptions::wait_for_resources (ActorClient/TaskClient start/call retry
run starts rejected for lack of memory or a concurrent-run slot), matching JS #1091.

Fixes ListIterator (every collection's iterate()/iterate_items()) to stop paging on
an empty page rather than a page's reported `total`, so a listing that grows during
iteration (e.g. a dataset a running Actor keeps pushing to) is read to the end;
dataset item iteration also now advances by the x-apify-pagination-count scanned
count rather than items.len() when a filter/unwind makes them differ. Matches JS #1125.

Fixes wait_for_finish to stop polling a run/build ID that keeps 404ing once a
3-second grace period elapses, instead of polling forever when wait_secs is None.
Matches JS #1124's waitForFinish() fix.

Reviewed and found not applicable to this client's architecture: JS #1122/#1121
(Rust's update()/unwind are already narrower than what those PRs restrict JS to),
#1107 (no generated-model layer for a schema-title rename to propagate into), and
#1123/#1105 (StreamedLog-internal bugs with no corresponding surface in Rust's
plain Stream-returning log API). docs PR #3043's new Profile.readme field needs no
code change (already reachable via the existing flatten-to-extra model pattern).

Bumps API_SPEC_VERSION to v2-2026-10-08T073338Z and crate version to 0.12.0.
@apify-service-account apify-service-account added the tested Temporary label used only programatically for some analytics. label Oct 9, 2026
@apify-service-account apify-service-account added the t-tooling Issues with this label are in the ownership of the tooling team. label Oct 9, 2026
The comment on the `x-apify-pagination-total` fallback still described the
old total-driven/short-page termination logic this PR's own ListIterator
change removed. Re-describe the fallback as informational-only.
@Pijukatel Pijukatel closed this Oct 9, 2026
@Pijukatel
Pijukatel deleted the claude/rust-client-sync-2026-10-09 branch October 12, 2026 06:41
@Pijukatel
Pijukatel restored the claude/rust-client-sync-2026-10-09 branch October 12, 2026 12:50
@Pijukatel Pijukatel reopened this Oct 12, 2026
@Pijukatel Pijukatel added the adhoc Ad-hoc unplanned task added during the sprint. label Oct 12, 2026
@Pijukatel Pijukatel closed this Oct 12, 2026
@Pijukatel
Pijukatel deleted the claude/rust-client-sync-2026-10-09 branch October 12, 2026 13:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

adhoc Ad-hoc unplanned task added during the sprint. t-tooling Issues with this label are in the ownership of the tooling team. tested Temporary label used only programatically for some analytics.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants