1use std::io::{Read, Write};
2
3pub mod stdio;
4
5pub fn interact(
6 mut r: impl Read,
7 mut w: impl Write,
8 f: impl Fn(String) -> String,
9) -> Result<(), std::io::Error> {
10 let mut input = String::new();
11 r.read_to_string(&mut input)?;
12 let output = f(input);
13 w.write_all(output.as_bytes())
14}
15
16#[cfg(test)]
17mod tests {
18 use super::*;
19
20 #[test]
21 fn interact_with_write_read_traits() {
22 let mut input = b"1234".as_ref();
23 let mut output = Vec::<u8>::new();
24 let res = interact(&mut input, &mut output, |x| x.chars().rev().collect());
25 assert!(res.is_ok());
26 assert_eq!(b"4321".as_ref(), &output);
27 }
28}