p2sh 0.4.3

The p2sh Programming language interpreter
use std::cell::RefCell;
use std::fmt;
use std::fs;
use std::io;

#[derive(Debug)]
pub enum FileHandle {
    Reader(RefCell<io::BufReader<fs::File>>),
    Writer(RefCell<io::BufWriter<fs::File>>),
    Stdin,
    Stdout,
    Stderr,
}

impl FileHandle {
    pub fn new_reader(reader: io::BufReader<fs::File>) -> Self {
        Self::Reader(RefCell::new(reader))
    }
    pub fn new_writer(writer: io::BufWriter<fs::File>) -> Self {
        Self::Writer(RefCell::new(writer))
    }
}

impl fmt::Display for FileHandle {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match &self {
            Self::Reader(_) => write!(f, "<file: reader>"),
            Self::Writer(_) => write!(f, "<file: writer>"),
            Self::Stdin => write!(f, "<stdin>"),
            Self::Stdout => write!(f, "<stdout>"),
            Self::Stderr => write!(f, "<stderr>"),
        }
    }
}