# Instructions for AI Agents
## What is This Codebase?
This is a Rust client for the [RabbitMQ HTTP API](https://www.rabbitmq.com/docs/http-api-reference).
## Build System
All the standard Cargo commands apply but with one important detail: make sure to add `--all-features` so that
both the async and blocking client are built, tested, linted, and so on.
* `cargo build --all-features` to build
* `cargo nextest run --all-features` to run tests
* `cargo clippy --all-features` to lint
* `cargo fmt` to reformat
* `cargo publish` to publish the crate
Always run `cargo check --all-features` before making changes to verify the codebase compiles cleanly.
If compilation fails, investigate and fix compilation errors before proceeding with any modifications.
## The Async and Blocking Clients
This library provides two clients:
* An async client, `rabbitmq_http_client::api::Client`, defined in `src/api.rs`
* A blocking client, `rabbitmq_http_client::api::BlockingClient`, defined in `src/blocking_api.rs`
They have very similar APIs except that all functions of the async client are, well, `async`.
## Key Files
* Async client: `src/api/*.rs`
* Blocking client: `src/blocking_api/*.rs`
* Error types: `src/error.rs`
* HTTP API request types: `src/requests/*.rs`
* HTTP API response types: `src/responses/*.rs`
* Types shared between requests and responses: `src/commons.rs`
* Definition transformations: `src/transformers.rs`
## Test Suite Layout
* `tests/async*.rs` test modules test the async client, use a Tokio runtime and `async` functions
* `tests/blocking*.rs` test modules test the blocking client and regular (non-`async`) functions
* `tests/unit*.rs` modules are for unit tests
* `tests/*proptests.rs` are property-based tests
* `tests/test_helpers.rs` contains helper functions shared by multiple test modules
Use `cargo nextest run --profile default --all-features '--' --exact [test module name]` to run
all tests in a specific module.
### Property-based Tests
Property-based tests are written using [proptest](https://docs.rs/proptest/latest/proptest/) and
use a naming convention: they begin with `prop_`.
To run the property-based tests specifically, use `cargo nextest run --all-features -- --show-output`.
## Source of Domain Knowledge
* [RabbitMQ HTTP API](https://www.rabbitmq.com/docs/http-api-reference)
* [RabbitMQ Documentation](https://www.rabbitmq.com/docs/)
Treat this documentation as the ultimate first party source of truth.
## Change Log
If asked to perform change log updates, consult and modify `CHANGELOG.md` and stick to its
existing writing style.
## Git Commits
* Do not commit changes automatically without an explicit permission to do so
* Never add yourself as a git commit coauthor