#![warn(missing_docs)]
use strum_macros::EnumIter;
#[derive(Debug, PartialEq, Eq, EnumIter)]
#[non_exhaustive]
pub enum KnownEngine {
Firefox,
Chromium(&'static str),
Safari,
}
#[derive(Clone, Debug, PartialEq, Eq, EnumIter)]
#[non_exhaustive]
pub enum KnownBrowser {
Firefox,
Chrome,
ChromeBeta,
Chromium,
#[cfg(target_os = "windows")]
Edge,
#[cfg(target_os = "macos")]
Safari,
}
impl KnownBrowser {
pub fn engine(&self) -> KnownEngine {
match self {
KnownBrowser::Firefox => KnownEngine::Firefox,
#[cfg(target_os = "linux")]
KnownBrowser::Chrome => KnownEngine::Chromium("Chrome Safe Storage"),
#[cfg(target_os = "macos")]
KnownBrowser::Chrome => KnownEngine::Chromium("Chrome"),
#[cfg(target_os = "windows")]
KnownBrowser::Chrome => KnownEngine::Chromium(""),
#[cfg(target_os = "linux")]
KnownBrowser::ChromeBeta => KnownEngine::Chromium("Chrome Safe Storage"),
#[cfg(target_os = "macos")]
KnownBrowser::ChromeBeta => KnownEngine::Chromium("Chrome"),
#[cfg(target_os = "windows")]
KnownBrowser::ChromeBeta => KnownEngine::Chromium(""),
#[cfg(target_os = "linux")]
KnownBrowser::Chromium => KnownEngine::Chromium("Chromium Safe Storage"),
#[cfg(target_os = "macos")]
KnownBrowser::Chromium => KnownEngine::Chromium("Chromium"),
#[cfg(target_os = "windows")]
KnownBrowser::Chromium => KnownEngine::Chromium(""),
#[cfg(target_os = "windows")]
KnownBrowser::Edge => KnownEngine::Chromium(""),
#[cfg(target_os = "macos")]
KnownBrowser::Safari => KnownEngine::Safari,
}
}
pub fn default_config_path(&self) -> Option<std::path::PathBuf> {
match self {
#[cfg(target_os = "linux")]
KnownBrowser::Firefox => dirs::home_dir().map(|p| p.join(".mozilla").join("firefox")),
#[cfg(target_os = "macos")]
KnownBrowser::Firefox => dirs::data_dir().map(|p| p.join("Firefox")),
#[cfg(target_os = "windows")]
KnownBrowser::Firefox => {
dirs::data_dir().map(|p| p.join("Mozilla").join("Firefox").join("Profiles"))
}
#[cfg(target_os = "linux")]
KnownBrowser::Chrome => {
dirs::home_dir().map(|p| p.join(".config").join("google-chrome"))
}
#[cfg(target_os = "macos")]
KnownBrowser::Chrome => dirs::data_dir().map(|p| p.join("Google").join("Chrome")),
#[cfg(target_os = "windows")]
KnownBrowser::Chrome => {
dirs::data_local_dir().map(|p| p.join("Google").join("Chrome").join("User Data"))
}
#[cfg(target_os = "linux")]
KnownBrowser::ChromeBeta => {
dirs::home_dir().map(|p| p.join(".config").join("google-chrome-beta"))
}
#[cfg(target_os = "macos")]
KnownBrowser::ChromeBeta => {
dirs::data_dir().map(|p| p.join("Google").join("Chrome Beta"))
}
#[cfg(target_os = "windows")]
KnownBrowser::ChromeBeta => dirs::data_local_dir()
.map(|p| p.join("Google").join("Chrome Beta").join("User Data")),
#[cfg(target_os = "linux")]
KnownBrowser::Chromium => dirs::home_dir().map(|p| p.join(".config").join("chromium")),
#[cfg(target_os = "macos")]
KnownBrowser::Chromium => dirs::data_dir().map(|p| p.join("Chromium")),
#[cfg(target_os = "windows")]
KnownBrowser::Chromium => {
dirs::data_local_dir().map(|p| p.join("Chromium").join("User Data"))
}
#[cfg(target_os = "windows")]
KnownBrowser::Edge => {
dirs::data_local_dir().map(|p| p.join("Microsoft").join("Edge").join("User Data"))
}
#[cfg(target_os = "macos")]
KnownBrowser::Safari => dirs::home_dir().map(|p| p.join("Library").join("Cookies")),
}
}
}