Skip to content

Latest commit

 

History

History
40 lines (22 loc) · 2.74 KB

CONTRIBUTING.md

File metadata and controls

40 lines (22 loc) · 2.74 KB

CONTRIBUTING

Thank you for considering contributing to our project! This document provides guidelines for contributing and the project's coding standards. Following these will make your contribution easier to incorporate and maintain the consistency and quality of the codebase.

Code of Conduct

We expect all contributors to respect each other and communicate in a constructive manner. Please remember to treat everyone with respect, regardless of their level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality. Any inappropriate behavior or harassment will not be tolerated.

Project Directives

File Structure

Our project follows a certain structure for better organization. The top-level directory consists of a src folder where all the source code is located, a tests folder for unit tests, and a doc folder for documentation. In the src directory, each hash function is placed in its own subdirectory, encapsulating its logic and keeping the codebase clean.

Types Visibility

In general, types should be private unless they need to be exposed for a specific reason. Only types that are part of the public API, or are required for the implementation of public API methods, should be public. This approach encourages encapsulation and reduces the chance of unintended usage or dependencies.

Building Block Types

Whenever possible, we encourage the use of internal building block types. These types have been developed with the specific requirements of the project in mind, and using them will ensure consistency across the project and will make the code easier to maintain.

std Imports

This project is primarily no_std, so standard library imports should be avoided in the main codebase. However, std imports may be acceptable in the tests directory, where test code runs on platforms with a standard library available.

External Crates

Before considering including an external crate, you should evaluate whether the functionality provided by the crate cannot be efficiently implemented within the project. In addition, the following considerations should be taken into account:

  • The external crate must be maintained and have recent updates.
  • The crate should be widely used and have a good reputation in the Rust community.
  • The crate should not include std in its dependency chain.
  • The crate should be compatible with the GPL-2.0-only license.

If you still believe that including an external crate is the right choice, please explain your reasoning in your pull request.

Conclusion

Thank you for reading these guidelines and considering contributing to our project. We look forward to reviewing your pull requests!