ase_shell/commands/
targets.rs1use std::{
2 fs::File,
3 io::{self, Write},
4 path::PathBuf,
5};
6
7#[derive(Debug, PartialEq, Clone)]
8pub enum StdoutTarget {
9 Stdout,
10 Overwrite(PathBuf),
11 Append(PathBuf),
12}
13
14#[derive(Debug, PartialEq, Clone)]
15pub enum StderrTarget {
16 Stderr,
17 Overwrite(PathBuf),
18 Append(PathBuf),
19}
20
21pub fn open_writer(target: &StdoutTarget) -> anyhow::Result<Box<dyn Write>> {
22 match target {
23 StdoutTarget::Stdout => Ok(Box::new(io::stdout())),
24 StdoutTarget::Overwrite(path) => Ok(Box::new(File::create(path)?)),
25 StdoutTarget::Append(path) => Ok(Box::new(
26 File::options().append(true).create(true).open(path)?,
27 )),
28 }
29}
30
31pub fn open_stderr_writer(target: &StderrTarget) -> anyhow::Result<Box<dyn Write>> {
32 match target {
33 StderrTarget::Stderr => Ok(Box::new(io::stderr())),
34 StderrTarget::Overwrite(path) => Ok(Box::new(File::create(path)?)),
35 StderrTarget::Append(path) => Ok(Box::new(
36 File::options().append(true).create(true).open(path)?,
37 )),
38 }
39}