Thank you for your interest in contributing! This project aims to be a high-quality, pure-Rust DICOM toolkit, and contributions are welcome.
- Use the GitHub issue tracker
- Include: Rust version, OS, minimal reproduction steps, expected vs actual behavior
- For DICOM file parsing issues, include a (de-identified) sample file if possible
- Open a GitHub issue with the
enhancementlabel - Describe the use case, not just the solution
- Reference relevant DICOM standard sections (PS3.x) where applicable
- Fork the repository and create a feature branch from
main - Write tests for any new functionality
- Run the full test suite:
cargo test --workspace - Run lints:
cargo clippy --workspace -- -D warnings - Format code:
cargo fmt --all - Open a pull request with a clear description of your changes
- Follow standard Rust idioms and naming conventions
- Use
rustfmtdefaults (no custom configuration) - Add doc comments (
///) to all public APIs - Keep
unsafeusage to an absolute minimum (prefer zero) - Prefer returning
Result<T, E>over panicking
- Reference the DICOM standard section when implementing protocol features
- Tag constants should match PS3.6 names (converted to UPPER_SNAKE_CASE)
- Transfer syntax UIDs must match PS3.5/PS3.6 exactly
By contributing, you agree that your contributions will be licensed under the same terms as the project: MIT OR Apache-2.0, at the user's option.