tryrun 0.5.3

This crate is no longer maintained.
use std::{
    env,
    io::{self, prelude::*},
    process,
};

pub(crate) const DEBUG_ASSERTIONS: &str = "DEBUG_ASSERTIONS";
pub(crate) const NO_STDOUT: &str = "NO_STDOUT";
pub(crate) const NO_STDERR: &str = "NO_STDERR";
pub(crate) const UPDATE_STDOUT: &str = "UPDATE_STDOUT";
pub(crate) const UPDATE_STDERR: &str = "UPDATE_STDERR";
pub(crate) const NON_UNICODE: &str = "NON_UNICODE";
pub(crate) const FAIL: &str = "FAIL";
pub(crate) const EXIT_CODE: i32 = 123;

#[allow(dead_code)]
fn main() {
    assert_eq!(
        cfg!(debug_assertions),
        env::var(DEBUG_ASSERTIONS).unwrap().parse().unwrap()
    );
    let stdout = io::stdout();
    let mut stdout = stdout.lock();
    if env::var_os(NO_STDOUT).is_none() {
        writeln!(stdout, "args: {:?}\nstdin:", env::args_os()).unwrap();
        io::copy(&mut io::stdin().lock(), &mut io::stdout().lock()).unwrap();
        stdout.write_all(b"[stdin end]\nstdout\n").unwrap();
        if env::var_os(NON_UNICODE).is_some() {
            stdout.write_all(b"\xffstdout\x80\n").unwrap();
        }
    } else {
        let stdin = io::stdin();
        let mut stdin = stdin.lock();
        while stdin.read(&mut [0]).unwrap() != 0 {}
    }
    let stderr = io::stderr();
    let mut stderr = stderr.lock();
    if env::var_os(NO_STDERR).is_none() {
        stderr.write_all(b"stderr\n").unwrap();
        if env::var_os(NON_UNICODE).is_some() {
            stderr.write_all(b"\xffstderr\x80\n").unwrap();
        }
    }
    if env::var_os(UPDATE_STDOUT).is_some() {
        stdout.write_all(b"updated stdout\n").unwrap();
    }
    if env::var_os(UPDATE_STDERR).is_some() {
        stderr.write_all(b"updated stderr\n").unwrap();
    }
    if env::var_os(FAIL).is_some() {
        process::exit(EXIT_CODE);
    }
}