grep_table_converter/
io.rs1use 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 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}