jinpyok_input/
lib.rs

1//! My input collection
2
3use std::io::stdin;
4
5// When input multiple data, return Vec<String>.. last string probably has '\n'
6pub fn input_multiple(comment: &str) -> Option<Vec<String>> {
7    println!("{}", comment);
8    let mut result: String = String::new();
9    match stdin().read_line(&mut result) {
10        Ok(_) => Some(result.split_whitespace().map(|s| s.to_string()).collect()),
11        Err(e) => {
12            println!("input_multiple read_line error: {}", e);
13            None
14        }
15    }
16}
17
18// When input one string
19pub fn input_string(comment: &str) -> Option<String> {
20    println!("{}", comment);
21    let mut result: String = String::new();
22    match stdin().read_line(&mut result) {
23        Ok(_) => Some(result.trim().to_string()),
24        Err(e) => {
25            println!("input_string read_line error: {}", e);
26            None
27        }
28    }
29}
30
31// when input one of i8 ~ i64, u8 ~ u64, isize, usize
32pub fn input_s<T: std::str::FromStr>(comment: &str) -> Option<T> {
33    println!("{}", comment);
34    let mut result: String = String::new();
35    match stdin().read_line(&mut result) {
36        Ok(_) => {}
37        Err(e) => {
38            println!("input_s read_line error: {}", e);
39            return None;
40        }
41    }
42    match result.trim().parse() {
43        Ok(n) => Some(n),
44        Err(_) => {
45            println!("input_s parse error");
46            None
47        }
48    }
49}
50
51// test
52#[cfg(test)]
53mod tests {
54    use super::*;
55
56    #[test]
57    fn it_works() {
58        let test1: i64 = input_s::<i64>("i64: ").unwrap();
59        let test2: f32 = input_s::<f32>("f32: ").unwrap();
60        let test3: i8 = input_s::<i8>("i8: ").unwrap();
61        let test4: isize = input_s::<isize>("isize: ").unwrap();
62        let test5: String = input_string("string: ").unwrap();
63        let test6: Vec<String> = input_multiple("multiple: ").unwrap();
64        let temp: Vec<String> = vec!["abc".to_string(), "def".to_string()];
65        assert_eq!(1, test1);
66        assert_eq!(2.0, test2);
67        assert_eq!(3, test3);
68        assert_eq!(4, test4);
69        assert_eq!("abcde".to_string(), test5);
70        assert_eq!(temp, test6);
71    }
72}