Skip to main content

cfn_guard/utils/
reader.rs

1use std::fs::File;
2use std::io::{Cursor, Read, Stdin};
3
4pub struct Reader {
5    inner: ReadBuffer,
6}
7
8impl Default for Reader {
9    fn default() -> Self {
10        Self {
11            inner: ReadBuffer::Stdin(std::io::stdin()),
12        }
13    }
14}
15
16impl Read for Reader {
17    fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
18        match &mut self.inner {
19            ReadBuffer::Stdin(stdin) => stdin.read(buf),
20            ReadBuffer::Cursor(cursor) => cursor.read(buf),
21            ReadBuffer::File(file) => file.read(buf),
22        }
23    }
24}
25
26impl Reader {
27    pub fn new(stdin: ReadBuffer) -> Self {
28        Self { inner: stdin }
29    }
30}
31
32pub enum ReadBuffer {
33    Stdin(Stdin),
34    Cursor(Cursor<Vec<u8>>),
35    File(File),
36}