use std::fmt;
use std::path::PathBuf;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum BrowserKind {
Chrome,
Edge,
UngoogledChromium,
Chromium,
ChromeForTesting,
HeadlessShell,
Custom,
}
impl BrowserKind {
pub fn display_name(&self) -> &'static str {
match self {
Self::Chrome => "Google Chrome",
Self::Edge => "Microsoft Edge",
Self::UngoogledChromium => "Ungoogled Chromium",
Self::Chromium => "Chromium",
Self::ChromeForTesting => "Chrome for Testing",
Self::HeadlessShell => "Chrome Headless Shell",
Self::Custom => "Custom Browser",
}
}
pub fn is_managed(&self) -> bool {
matches!(self, Self::ChromeForTesting | Self::HeadlessShell)
}
}
impl fmt::Display for BrowserKind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.display_name())
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BrowserSource {
CliFlag,
EnvVar,
SystemPath,
PathSearch,
ManagedInstall,
}
impl fmt::Display for BrowserSource {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::CliFlag => write!(f, "CLI flag"),
Self::EnvVar => write!(f, "environment variable"),
Self::SystemPath => write!(f, "system path"),
Self::PathSearch => write!(f, "PATH search"),
Self::ManagedInstall => write!(f, "managed install"),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BrowserMode {
Standard,
Strict,
Fast,
}
#[derive(Debug, Clone)]
pub struct DetectedBrowser {
pub kind: BrowserKind,
pub path: PathBuf,
pub version: Option<String>,
pub source: BrowserSource,
}
#[derive(Debug, Clone)]
pub struct ResolvedBrowser {
pub browser: DetectedBrowser,
pub mode: BrowserMode,
pub all_candidates: Vec<DetectedBrowser>,
}
#[derive(Debug, Clone, Copy)]
pub enum InstallTarget {
ChromeForTesting,
HeadlessShell,
}