Skip to main content

grep_table_converter/
io.rs

1use std::io::{Read, BufRead};
2use std::fs::File;
3use chrono::Utc;
4use anyhow::Context as _;
5
6use super::generator::Mode;
7
8pub fn read_from_stdin<R>(mut reader: R) -> anyhow::Result<String>
9where
10    R: BufRead
11{
12    let mut buf = String::new();
13    reader.read_to_string(&mut buf)?;
14
15    Ok(buf)
16}
17
18pub fn read_from_file(filename: &String) -> anyhow::Result<String> {
19    // TODO: make testable
20    let mut buf = String::new();
21    let mut f = File::open(filename)
22        .with_context(|| format!("Could not open file: {}", filename))?;
23
24    f.read_to_string(&mut buf)
25     .with_context(|| format!("Something went wrong reading file: {}", filename))?;
26
27    Ok(buf)
28}
29
30pub fn generate_filename(mode: &Mode) -> String {
31    let formatted_date = Utc::now().format("%Y%m%d%H%M%S").to_string();
32    String::from("output_") + formatted_date.as_str() + mode.extension()
33}
34
35#[cfg(test)]
36mod test {
37    use super::*;
38
39    #[test]
40    fn stdin_read_test() {
41        let input = b"this is a test";
42        let result = read_from_stdin(&input[..]);
43        assert_eq!(input.iter().map(|&s| s as char).collect::<String>(), result.unwrap());
44    }
45
46    #[test]
47    fn test_generating_filenmae() {
48        let formatted_date = Utc::now().format("%Y%m%d%H%M%S").to_string();
49        let mode = Mode::CSV;
50        assert_eq!(
51            String::from("output_") + formatted_date.as_str() + ".csv",
52            generate_filename(&mode)
53        );
54    }
55}