Skip to content

Latest commit

 

History

History
113 lines (78 loc) · 2.95 KB

File metadata and controls

113 lines (78 loc) · 2.95 KB

Contribution guidelines

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.

Reporting issues

Before reporting an issue on the issue tracker, please check that it has not already been reported by searching for some related keywords.

Pull requests

Try to do one pull request per change.

Updating the changelog

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:

  • Added for new features.
  • Changed for changes in existing functionality.
  • Deprecated for soon-to-be removed features.
  • Removed for now removed features.
  • Fixed for any bug fixes.
  • Security in case of vulnerabilities.

If the required subsection does not exist yet under Unreleased, create it!

Developing

Set up

This is no different than other Rust projects.

git clone https://github.com/mxsm/rocketmq-rust
cd rocketmq-rust
cargo test

Useful Commands

  • 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 taplo to format Cargo.toml files across the repository

    cargo install taplo-cli --locked
    taplo format -o align_entries=true **/Cargo.toml

Error architecture

When adding or changing an error that can cross crate, process, protocol, or CLI boundaries:

  • Prefer RocketMQResult or a domain-specific result type in library code.
  • Do not add legacy aliases such as RocketmqError, LegacyRocketMQResult, or LegacyResult.
  • Do not expose anyhow::Result from library or public business APIs.
  • Add or reuse an ErrorKind and one ErrorSpec entry before exposing a new public error.
  • Use BoundaryErrorView or ErrorSpec protocol primitives for remoting, gRPC, HTTP, and CLI responses.
  • Keep sensitive values in Sensitive<T> or redacted ErrorContext fields.
  • Preserve source chains with typed wrappers and #[source] instead of early stringification.
  • Keep RocketMQError::Internal for audited internal invariants, not ordinary business failures.

Run the error hygiene guard before opening a pull request:

python scripts/error_architecture_guard.py

On Windows, the same guard is available through:

.\scripts\check-error-hygiene.ps1