Contributing to RustQuant

I'm particularly interested in hearing from people with strong experience in implementing quantitative software in a real-world/professional setting. This is irrespective of whether you're interested in Rust or not, I would simply love to get feedback and suggestions from experienced people.

If you're reading this, I assume you're interested in contributing to this project.

If so, thank you very much! I would love to grow the project and have a solid, stable library that can be used by many people.

Firstly, this contribution guide is a work in progress, so bare with me.

I welcome contributions of all kinds, including:

  • Bug reports.
  • Bug fixes.
  • Feature requests.
  • Feature implementations.
  • Documentation improvements.
  • Unit tests.

If you have any ideas, feel free to make an issue to discuss it, or just make a pull request.

Additionally, feel free to contact me directly at: RustQuantContact@gmail.com

If you decide to contribute, please include the following license header in any files you create:

#![allow(unused)]
fn main() {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// RustQuant: A Rust library for quantitative finance tools.
// Copyright (C) 2023 https://github.com/avhz
// Dual licensed under Apache 2.0 and MIT. 
// See:
//      - LICENSE-APACHE.md 
//      - LICENSE-MIT.md
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
}

The following tools are good to use before pushing, cargo build at a minimum:

cargo doc
cargo fmt
cargo clippy
cargo check
cargo test
cargo build

I also like to separate the code as below, as I think it improves the readability a lot, and I would encourage any PRs to do the same (or similar). Of course, any suggestions or opinions on different styles are welcome!

#![allow(unused)]
fn main() {
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Structs, enums, and traits
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

enum Enum {}

struct Struct {}

trait Trait {}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Implementations, functions, and macros
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

impl Struct {}

impl Trait for Struct {}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Unit tests
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn very_thorough_test() {}
}
}

One last thing, add an entry with your @username to the CHANGELOG.md file so that people can see what you've done.

Thank you for your interest in contributing to RustQuant!