1use std::io::*;
2
3pub trait Io {
5 fn read_line(&mut self) -> std::io::Result<String>;
6 fn write_line(&mut self, line: &str) -> std::io::Result<()> {
7 std::io::stdout().write_all(line.as_bytes())
8 }
9}
10
11pub struct StdIo {}
13
14impl StdIo {
16 pub fn new() -> StdIo {
17 StdIo{}
18 }
19}
20
21impl Io for StdIo {
22 fn read_line(&mut self) -> std::io::Result<String> {
24 let mut line = String::new();
25 std::io::stdin().read_line(&mut line)?;
26 return Ok(line)
27 }
28}
29
30pub struct StringInStdOut<'a> {
32 reader: BufReader<&'a[u8]>
33}
34
35impl<'a> StringInStdOut<'a> {
36 pub fn from_string(input: &'a String) -> StringInStdOut<'a> {
38 StringInStdOut{ reader: BufReader::new(input.as_bytes()) }
39 }
40}
41
42impl<'a> Io for StringInStdOut<'a> {
43 fn read_line(&mut self) -> std::io::Result<String> {
45 let mut line = String::new();
46 self.reader.read_line(&mut line)?;
47 return Ok(line);
48 }
49}