use chromiumoxide::BrowserConfig;
use crate::PinterestLoginError;
#[cfg(feature = "debug")]
use log::{info, trace, debug};
pub trait BrowserConfigBuilder {
fn build_browser_config(&self) -> crate::Result<BrowserConfig>;
}
pub struct DefaultBrowserConfigBuilder {
headless: bool,
request_timeout: Option<std::time::Duration>,
launch_timeout: Option<std::time::Duration>
}
impl DefaultBrowserConfigBuilder {
pub fn new(headless: bool, request_timeout: Option<std::time::Duration>, launch_timeout: Option<std::time::Duration>) -> Self {
Self {
headless,
request_timeout,
launch_timeout
}
}
}
impl BrowserConfigBuilder for DefaultBrowserConfigBuilder {
#[inline(always)]
fn build_browser_config(&self) -> crate::Result<BrowserConfig> {
#[cfg(feature = "debug")] {
debug!("Building browser config");
trace!("Headless: {}", self.headless);
trace!("Request timeout: {:?}", self.request_timeout);
trace!("Launch timeout: {:?}", self.launch_timeout);
}
let mut browser_config_builder = if self.headless {
BrowserConfig::builder()
} else {
BrowserConfig::builder().with_head()
};
if let Some(timeout) = self.request_timeout {
#[cfg(feature = "debug")] {
trace!("Setting request timeout to {:?}", timeout);
}
browser_config_builder = browser_config_builder.request_timeout(timeout);
}
if let Some(timeout) = self.launch_timeout {
#[cfg(feature = "debug")] {
trace!("Setting launch timeout to {:?}", timeout);
}
browser_config_builder = browser_config_builder.launch_timeout(timeout);
}
#[cfg(feature = "debug")] {
info!("Built browser config");
trace!("Browser config: {:?}", browser_config_builder);
}
browser_config_builder.build().map_err(PinterestLoginError::BrowserConfigBuildError)
}
}
impl Default for DefaultBrowserConfigBuilder {
fn default() -> Self {
Self::new(true, Some(std::time::Duration::from_secs(5)), None)
}
}