rustian_roulette/
lib.rs

1extern crate rand;
2
3use rand::prelude::*;
4use std::fs;
5use std::path::{Path, PathBuf};
6use std::process::exit;
7
8pub mod cmd;
9pub mod printer;
10
11pub fn pick_file(path: &Path) -> PathBuf {
12    let mut rng = thread_rng();
13    let contents: Vec<PathBuf> = fs::read_dir(path)
14        .expect("failed to read path dir")
15        .map(|r| r.expect("failed to read path").path())
16        .collect();
17    if contents.len() == 0 {
18        eprint!("Someones a chicken... Path points to dir with nothing!\n");
19        exit(0);
20    }
21    let unlucky = rng.gen_range(0, contents.len());
22
23    contents[unlucky].clone()
24}
25
26pub fn fire(path: &Path, chambers: usize) -> bool {
27    let mut rng = thread_rng();
28    if rng.gen_range(0, chambers) == 0 {
29        if fs::metadata(path)
30            .expect("failed to read file meta")
31            .is_dir()
32        {
33            std::fs::remove_dir_all(path).expect("failed to delete dir");
34        } else {
35            std::fs::remove_file(path).expect("failed to delete file");
36        }
37
38        return true;
39    }
40    false
41}