# Boilerplate Code Snippets
### Code benchmark
```
use std::time::{Instant};
let start = Instant::now();
// code to benchmark
let end = Instant::now();
println!("{:?}", (end - start).as_millis());
```
---
### Suppress warnings
Add at the beginning of the cargo source file:
```
#![allow(
dead_code,
unused_variables,
unused_parens,
unused_imports,
unused_mut,
unused_must_use
)]
```
---
### Reading command line arguments
Remember `args[0]` is program path like: `"project/code/target/debug/ghc-pr"`. You probably want `args[1]` etc.
```
use std::env;
fn get_cli_args() -> Result<(usize, usize, usize), Box<dyn Error>> {
let args: Vec<String> = env::args().collect();
let input_file_index = args[1].parse()?; // example variable names
let some_other_arg = args[2].parse()?;
let third_arg = args[3].parse()?;
Ok((input_file_index, some_other_arg, third_arg))
}
```
---
### Parsing data files
```
fn get_filename(file_number: usize) -> Result<String, Box<dyn Error>> {
match file_number {
0 => Ok("data/input/a_example.txt".to_owned()),
1 => Ok("data/input/b_little_bit_of_everything.txt".to_owned()),
_ => bail!("Incorrect file number specified."),
}
}
fn get_cli_args() -> Result<(usize), Box<dyn Error>> {
let args: Vec<String> = env::args().collect();
let input_file_index = args[1].parse()?;
Ok((input_file_index))
}
fn read_input(file_path: &str) -> Result<Vec<String>, Box<dyn Error>> {
let file = File::open(file_path)?;
let reader = BufReader::new(file);
let mut lines = Vec::new();
for line in reader.lines() {
let line = line?;
let line = line.trim().parse()?;
lines.push(line);
}
Ok(lines)
}
fn parse_input_data(input_data: &Vec<String>) -> Result<(u32, u32), Box<dyn Error>> {
let mut line01 = input_data[0].split_whitespace();
let line02 = input_data[1].split_whitespace();
let total_pizzas = line01.next().unwrap().parse()?;
let total_teams_of_two = line01.next().unwrap().parse()?;
let book_scores: Vec<u32> = line02.map(|x| x.parse().unwrap()).collect();
let mut libraries = vec![];
for i in 0..total_libraries as usize {
let mut line01 = input_data[i * 2 + 2].split_whitespace();
let line02 = input_data[i * 2 + 3].split_whitespace();
// ...
}
Ok((
total_pizzas,
total_teams_of_two,
))
}
```
### Main
```
fn main() -> Result<(), Box<dyn Error>> {
let (input_file_index) = get_cli_args()?;
let filename = get_filename(input_file_index)?;
let input_data = read_input(&filename)?;
let parsed_input = parse_input_data(&input_data);
}
```