cfn_guard/utils/
reader.rs1use 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}