csearch_app 1.0.0

library with core logic for csearch
Documentation
use crate::models::{Browser as ModelBrowser, Query, SearchEngine};
use anyhow::Result;
use url::Url;
use urlencoding::encode;
use webbrowser::{open_browser as open_webbrowser, Browser as WebBrowser};

pub struct OpenBrowserOptions<'a> {
    pub browser: &'a ModelBrowser,
    pub query: &'a Query,
    pub search_engine: &'a SearchEngine,
}

pub fn open_browser(options: OpenBrowserOptions) -> Result<()> {
    let browser = choose_webbrowser(options.browser);
    let url = create_search_url(options.query, options.search_engine)?;
    open_webbrowser(browser, url.as_str())?;
    Ok(())
}

fn create_search_url(query: &Query, search_engine: &SearchEngine) -> Result<Url> {
    let search_template = search_engine.get_search_template();
    let encoded_query = encode(query.0.as_str());
    let search_url = format!("{}{}", search_template, encoded_query);
    let result = Url::parse(&search_url)?;
    Ok(result)
}

fn choose_webbrowser(browser: &ModelBrowser) -> WebBrowser {
    match browser {
        ModelBrowser::Default => WebBrowser::Default,
    }
}