use std::path::PathBuf;
pub fn iniciar() {
#[cfg(windows)]
iniciar_windows();
}
#[cfg(windows)]
fn iniciar_windows() {
use windows_sys::Win32::System::Console::SetConsoleOutputCP;
let resultado = unsafe { SetConsoleOutputCP(65001) };
if resultado == 0 {
tracing::warn!(
"Falha ao configurar codepage UTF-8 (65001) no console Windows. \
Caracteres acentuados podem aparecer incorretamente em cmd.exe antigo."
);
} else {
tracing::debug!("Codepage UTF-8 (65001) configurado com sucesso no console Windows.");
}
}
pub fn stdout_eh_tty() -> bool {
use std::io::IsTerminal;
std::io::stdout().is_terminal()
}
pub fn diretorio_configuracao() -> Option<PathBuf> {
dirs::config_dir().map(|base| base.join("duckduckgo-search-cli"))
}
pub fn caminho_selectors_toml() -> Option<PathBuf> {
diretorio_configuracao().map(|base| base.join("selectors.toml"))
}
pub fn caminho_user_agents_toml() -> Option<PathBuf> {
diretorio_configuracao().map(|base| base.join("user-agents.toml"))
}
pub fn nome_plataforma() -> &'static str {
if cfg!(target_os = "linux") {
"linux"
} else if cfg!(target_os = "macos") {
"macos"
} else if cfg!(target_os = "windows") {
"windows"
} else {
"outro"
}
}
#[cfg(test)]
mod testes {
use super::*;
#[test]
fn nome_plataforma_retorna_valor_conhecido() {
let nome = nome_plataforma();
assert!(matches!(nome, "linux" | "macos" | "windows" | "outro"));
}
#[test]
fn iniciar_nao_deve_panicar() {
iniciar();
}
#[test]
fn diretorio_configuracao_nao_vazio_em_sistemas_com_home() {
let _ = diretorio_configuracao();
}
#[test]
fn caminhos_toml_terminam_com_nomes_esperados() {
if let Some(selectors) = caminho_selectors_toml() {
assert!(selectors.ends_with("selectors.toml"));
}
if let Some(uas) = caminho_user_agents_toml() {
assert!(uas.ends_with("user-agents.toml"));
}
}
}