Rust#

Resources#

Organisation#

- Cargo.lock
- Cargo.toml
- src
  - lib.rs (normal code, unit tests, and run function)
  - main.rs (calls run function)
- tests
  - integration_test.rs (for run function from lib.rs)

Python extensions#

Arrays#

Multi-threading#

  • rayon-rs/rayon

  • par_bridge().try_for_each enables error from one of threads to be propagated back e.g., for columns

  • par_azip is similar for arrays

Error handling#

Cloud#

Format#

Lint#

Profile#

Benchmark#

Logging#

JSON#

async#

Docs#

  • rustdoc

  • #![warn(missing_docs)]

  • all public stuff

  • create simple examples

  • #![doc = include_str!("../README.md")]

  • cargo doc --no-deps --open

  • good example: bed_reader - Rust (docs.rs)

Database#

Builder pattern for keyword arguments#

Plotting#

Concatenating strings#

    let s1 = String::from("tic");
    let s2 = String::from("tac");
    let s3 = String::from("toe");

    let s = format!("{s1}-{s2}-{s3}");

Using an Enum to Store Multiple Types#

use std::collections::HashMap;
use std::hash::Hash;

#[derive(Debug, Eq, PartialEq, Hash)]
enum Keys {
    Int(i32),
    Text(String),
}

#[derive(Debug)]
#[allow(dead_code)]
enum SpreadsheetCell {
    Int(i32),
    Float(f64),
    Text(String),
}

fn main() {
    let mut scores = HashMap::new();

    scores.insert(Keys::Text(String::from("Blue")), 10);
    scores.insert(Keys::Text(String::from("Yellow")), 50);
    scores.insert(Keys::Int(42), 30);

    println!("{:#?}", scores);

    let row = vec![
        SpreadsheetCell::Int(3),
        SpreadsheetCell::Text(String::from("blue")),
        SpreadsheetCell::Float(10.12),
    ];

    println!("{:#?}", row);
}