find_browsers 0.2.0

A library for retrieving installed browsers (supports Windows and Linux).
Documentation
#[cfg(target_os = "linux")]
mod linux;

#[cfg(target_os = "windows")]
mod windows;

use std::path::PathBuf;

#[derive(Debug, Clone)]
pub struct Browser {
    pub name: String,
    pub exec: PathBuf,
}

pub fn get_browsers() -> Result<Vec<Browser>, Box<dyn std::error::Error>> {
    #[cfg(target_os = "windows")]
    return windows::get_browsers();
    #[cfg(target_os = "linux")]
    return linux::get_browsers();
    #[cfg(not(any(target_os = "windows", target_os = "linux")))]
    return Err("Unsupported OS".into());
}

#[cfg(target_os = "linux")]
pub fn get_executable_browsers() -> Result<Vec<Browser>, Box<dyn std::error::Error>> {
    let browsers = get_browsers()?;
    Ok(browsers.into_iter().filter(|b| b.exec.exists()).collect())
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn print_browsers() {
        let browsers = get_browsers().unwrap();
        for browser in &browsers {
            println!("Browser: {}\n Exec: {:?}", browser.name, browser.exec);
        }
        assert!(!browsers.is_empty(), "No browsers found");
    }

    #[cfg(target_os = "linux")]
    #[test]
    fn print_executable_browsers() {
        let browsers = get_executable_browsers().unwrap();
        for browser in &browsers {
            println!("Executable Browser: {}\n Exec: {:?}", browser.name, browser.exec);
            assert!(browser.exec.exists(), "Browser should exist");
        }
    }
}