Skip to content

feat: Rust SDK update for version 0.20.0 - #37

Merged
ChiragAgg5k merged 8 commits into
mainfrom
dev
Oct 15, 2026
Merged

ChiragAgg5k merged 8 commits into
mainfrom
dev

Conversation

@ChiragAgg5k

@ChiragAgg5k ChiragAgg5k commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

This PR contains updates to the SDK for version 0.20.0.

What's Changed

  • Breaking: requests send response format 2.5.0; Project.dev_keys was removed
  • Breaking: removed account.list_logs and users.list_logs with the Log and LogList models
  • Breaking: removed organization.create_key, get_key, list_keys, update_key and delete_key, and OrganizationKeyScopes; use organization.list_project_keys, get_project_key, update_project_key and delete_project_key instead
  • Breaking: removed BillingPlanGroup::Starter; use BillingPlanGroup::Free
  • Breaking: project.update_o_auth2_kakao takes enabled before prompt
  • Breaking: ExecutionMethod::default() is now POST, the spec default, instead of GET
  • Breaking: removed Block fields project_name, region, organization_name, organization_id, billing_plan and reason
  • Breaking: list_specifications returns each specification's prices and overage rates on the row itself. Removed the list-level pricing field and the DedicatedDatabaseSpecificationPricing model
  • Breaking: BackupRestoration.options is a serde_json::Value, not a String
  • Breaking: billing, backup, restoration and dedicated database fields the API can omit are Option
  • Breaking: prompt, native_client_ids, native_enabled, fingerprints and similar fields are no longer Option
  • Breaking: functions.update takes email_enabled
  • Breaking: mongo, mysql and postgresql create_restoration take restore_mode, target_name and auto_promote after target_time
  • Added: Client::single_upload for endpoints that take a file in one request
  • Added: Topic helper to build MQTT topics for push messages
  • Added: mongo, mysql and postgresql promote_restoration, and DedicatedDatabaseRestoration.restore_mode
  • Added: proxy.create_smtp_rule, the ProxyRuleProtocol enum and ProxyRule.protocol
  • Added: Function.email_enabled and ExecutionTrigger::Email
  • Added: Query aggregates (count, count_distinct, sum, avg, min, max and more), group_by, having, distinct, joins, relationship, covers, spatial_equals and page
  • Added: Query::builder() to chain queries into a list
  • Updated: models fill fields missing from a response with their documented defaults

@ChiragAgg5k ChiragAgg5k changed the title feat: Rust SDK update for version 0.20.0 feat: SDK update for version 0.20.0 Oct 14, 2026
@ChiragAgg5k ChiragAgg5k changed the title feat: SDK update for version 0.20.0 feat: Rust SDK update for version 0.20.0 Oct 14, 2026
@hansi-codes

hansi-codes Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

🔵 Tier A · Mergeable after minor fixes

Limited by an open minor finding: Check pagination offset multiplication for overflow

This release updates the Rust SDK to Appwrite API response format 2.5.0 and refreshes its generated models and service methods. It also adds query aggregation and building helpers, MQTT topic construction, single-request uploads, and newer database, proxy, auth, domain, and WAF APIs.

325 of 411 changed files were too large to include in full.

Verdict New comments Fixed Still open
💬 Commented 0 0 2

Note

Not approving while a bug finding is open: Check pagination offset multiplication for overflow

Fix with agent prompt
### Issue 1
src/query/mod.rs:700
**Check pagination offset multiplication for overflow**

For accepted `u32` inputs where `(page - 1) * per_page` exceeds `u32::MAX`, this multiplication panics in debug builds and wraps to a smaller offset in release builds. For example, `Query::page(u32::MAX, 2)` cannot produce the requested page and may panic instead.

### Issue 2
src/query/builder.rs:507-518
**Builder omits nested join variants**

`Query` provides `join_on`, `right_join_on`, and `full_outer_join_on`, but `Builder` only forwards `left_join_on`. Callers cannot chain the other supported multi-condition joins into a builder-produced query list.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.
📂 Walkthrough · 6
File Change
Cargo.toml, README.md, CHANGELOG.md Updates release metadata and documents the SDK's new API surface and compatibility.
src/client.rs, src/lib.rs, src/topic.rs Updates client response-format headers, adds single-request upload support, and exports the MQTT topic helper.
src/query/mod.rs, src/query/builder.rs Adds aggregation, grouping, join, spatial, and pagination query helpers and builder methods.
src/enums/**, src/models/** Refreshes enums and generated response models, including defaults and new API model types.
src/services/** Adds and updates generated service methods for the newer API endpoints and request contracts.
docs/examples/** Updates SDK examples for changed signatures and newly available operations.
⏳ Still open from earlier reviews · 2
🔇 Filtered out · 1

Findings Hansi considered but did not post.

Finding Why
Don't conflate server and response-format versions Verifier: The claimed conflation is not supported: 2.5.0 is an actual Appwrite server release, not just a response-format version. I checked the official appwrite/appwrite releases API, which reports release 2.5.0 published on 2026-10-13, before this PR's commits. Its release notes explicitly provide server installation and upgrade commands using appwrite/appwrite:2.5.0. The prior README distinguished API 2.0.0 from server 1.9.x, but that does not make the new 2.5.x server target incorrect.

Reviewed e6a29ea · Details · Comment @hansi-codes review to re-run, or mention @hansi-codes with a question.

@hansi-codes hansi-codes Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Tier S · Looks good to merge. Summary

@ChiragAgg5k

Copy link
Copy Markdown
Member Author

@hansi-codes review

@hansi-codes hansi-codes Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Tier S · Looks good to merge. Summary

@hansi-codes hansi-codes Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Tier A · See the inline comments. Summary

Comment thread src/query/mod.rs
if per_page < 1 {
panic!("Per page must be >= 1, got {}", per_page);
}
vec![Self::limit(per_page), Self::offset((page - 1) * per_page)]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check pagination offset multiplication for overflow

For accepted u32 inputs where (page - 1) * per_page exceeds u32::MAX, this multiplication panics in debug builds and wraps to a smaller offset in release builds. For example, Query::page(u32::MAX, 2) cannot produce the requested page and may panic instead.

Prompt To Fix With AI
This is a comment left during a code review.
Path: src/query/mod.rs
Line: 700

Comment:
**Check pagination offset multiplication for overflow**

For accepted `u32` inputs where `(page - 1) * per_page` exceeds `u32::MAX`, this multiplication panics in debug builds and wraps to a smaller offset in release builds. For example, `Query::page(u32::MAX, 2)` cannot produce the requested page and may panic instead.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

🟡 Minor · bug · Reply if this doesn't apply.

Comment thread src/query/builder.rs
Comment on lines +507 to +518
pub fn left_join_on<I, S>(
mut self,
table: impl Into<String>,
alias: impl Into<String>,
on: I,
) -> Self
where
I: IntoIterator<Item = S>,
S: AsRef<str>,
{
self.queries.push(Query::left_join_on(table, alias, on));
self

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Builder omits nested join variants

Query provides join_on, right_join_on, and full_outer_join_on, but Builder only forwards left_join_on. Callers cannot chain the other supported multi-condition joins into a builder-produced query list.

Prompt To Fix With AI
This is a comment left during a code review.
Path: src/query/builder.rs
Line: 507-518

Comment:
**Builder omits nested join variants**

`Query` provides `join_on`, `right_join_on`, and `full_outer_join_on`, but `Builder` only forwards `left_join_on`. Callers cannot chain the other supported multi-condition joins into a builder-produced query list.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

🟡 Minor · bug · Reply if this doesn't apply.

@ChiragAgg5k

Copy link
Copy Markdown
Member Author

@hansi-codes review

@hansi-codes hansi-codes Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Tier A · See the inline comments. Summary

@ChiragAgg5k
ChiragAgg5k merged commit e69d8ee into main Oct 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant