Skip to main content

ase_shell/commands/
targets.rs

1use 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}