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}