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

  • Make Rust modules for Python bottlenecks

Arrays

Multi-threading

  • 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

  • anyhow
  • thiserror
  • Pattern match range of Rust errors to Python ones, so these are returned to the Python user

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);
}