i3status_ext/
io.rs

1use std::io::*;
2
3/// trait for an interface that can read lines from any source and to stdout
4pub 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
11/// reads lines from *stdin* and writes to *stdout*
12pub struct StdIo {}
13
14// create Stdio instance
15impl StdIo {
16    pub fn new() -> StdIo {
17        StdIo{}
18    }
19}
20
21impl Io for StdIo {
22    /// read lines from stdin
23    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
30/// reads lines from `String` and writes to *stdout*
31pub struct StringInStdOut<'a> {
32    reader: BufReader<&'a[u8]>
33}
34
35impl<'a> StringInStdOut<'a> {
36    /// create StringStdOutIo instance from String
37    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    /// read lines from String
44    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}