First off, thank you for considering contributing to rocketmq-rust.
If your contribution is not straightforward, please first discuss the change you wish to make by creating a new issue before making the change.
Before reporting an issue on the issue tracker, please check that it has not already been reported by searching for some related keywords.
Try to do one pull request per change.
Update the changes you have made in CHANGELOG file under the Unreleased section.
Add the changes of your pull request to one of the following subsections, depending on the types of changes defined by Keep a changelog:
Addedfor new features.Changedfor changes in existing functionality.Deprecatedfor soon-to-be removed features.Removedfor now removed features.Fixedfor any bug fixes.Securityin case of vulnerabilities.
If the required subsection does not exist yet under Unreleased, create it!
This is no different than other Rust projects.
git clone https://github.com/mxsm/rocketmq-rust
cd rocketmq-rust
cargo test-
Build and run release version:
cargo build --release && cargo run --release -
Run Clippy:
cargo clippy --all-targets --all-features --workspace
-
Run all tests:
cargo test --all-features --workspace -
Check to see if there are code formatting issues
cargo fmt --all -- --check
-
Format the code in the project
cargo fmt --all
-
Use
taploto formatCargo.tomlfiles across the repositorycargo install taplo-cli --locked taplo format -o align_entries=true **/Cargo.toml
When adding or changing an error that can cross crate, process, protocol, or CLI boundaries:
- Prefer
RocketMQResultor a domain-specific result type in library code. - Do not add legacy aliases such as
RocketmqError,LegacyRocketMQResult, orLegacyResult. - Do not expose
anyhow::Resultfrom library or public business APIs. - Add or reuse an
ErrorKindand oneErrorSpecentry before exposing a new public error. - Use
BoundaryErrorVieworErrorSpecprotocol primitives for remoting, gRPC, HTTP, and CLI responses. - Keep sensitive values in
Sensitive<T>or redactedErrorContextfields. - Preserve source chains with typed wrappers and
#[source]instead of early stringification. - Keep
RocketMQError::Internalfor audited internal invariants, not ordinary business failures.
Run the error hygiene guard before opening a pull request:
python scripts/error_architecture_guard.pyOn Windows, the same guard is available through:
.\scripts\check-error-hygiene.ps1