use std::process::Command;
use std::str;
use camino::{Utf8Path, Utf8PathBuf};
use crate::Error;
pub fn config_dir() -> crate::Result<Utf8PathBuf> {
let config_dir = dirs_next::config_dir()
.ok_or_else(|| Error::InvalidValue("failed getting config directory".to_string()))?;
let config_dir = Utf8PathBuf::from_path_buf(config_dir)
.map_err(|e| Error::InvalidValue(format!("invalid bugbite config directory: {e:?}")))?;
Ok(config_dir.join("bugbite"))
}
pub fn current_dir() -> crate::Result<Utf8PathBuf> {
Utf8PathBuf::from(".")
.canonicalize_utf8()
.map_err(|e| Error::InvalidValue(format!("invalid current working directory: {e}")))
}
pub(crate) fn get_mime_type<P: AsRef<Utf8Path>>(path: P) -> crate::Result<String> {
let output = Command::new("file")
.args(["-b", "--mime-type"])
.arg(path.as_ref())
.output()?;
match str::from_utf8(&output.stdout).map(|s| s.trim()) {
Ok(s) if !s.is_empty() => Ok(s.to_string()),
_ => Err(Error::InvalidValue(
"file command returned invalid value".to_string(),
)),
}
}
#[macro_export]
macro_rules! is_terminal {
($fd:expr) => {
std::io::IsTerminal::is_terminal($fd)
|| (cfg!(feature = "test") && std::env::var("BUGBITE_IS_TERMINAL").is_ok())
};
}
pub use is_terminal;