rsteract/
lib.rs

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}