use std::fs::File;
use std::io::{self, BufWriter, Write};
use std::path::PathBuf;
use anyhow::{Result, bail};
use crate::output::color::{ColorSupport, detect_color_support_cached};
pub fn get_writer(output: &Option<PathBuf>, force_overwrite: bool) -> Result<(Box<dyn Write>, ColorSupport)> {
match output {
None => {
let writer = BufWriter::new(io::stdout());
let color = detect_color_support_cached();
Ok((Box::new(writer), color))
},
Some(path) => {
if path.to_string_lossy() == "-" {
let writer = BufWriter::new(io::stdout());
let color = detect_color_support_cached();
return Ok((Box::new(writer), color));
}
if path.exists() && !force_overwrite {
bail!(
"File '{}' already exists. Use --force-overwrite to overwrite.",
path.display()
);
}
let file = File::create(path)?;
let writer = BufWriter::new(file);
Ok((Box::new(writer), ColorSupport::NoColor))
},
}
}