use std::sync::Arc;
use futures_util::future::BoxFuture;
use millipede_core::{errors::CrawlError, proxy::ProxyInfo, request::Request, session::Session};
use crate::{BrowserResponse, PageHandle};
#[non_exhaustive]
pub struct BrowserPreHookCtx<'a> {
pub request: &'a Request,
pub page: &'a PageHandle,
pub session: Option<&'a Session>,
pub proxy: Option<&'a ProxyInfo>,
}
#[non_exhaustive]
pub struct BrowserPostHookCtx<'a> {
pub request: &'a Request,
pub page: &'a PageHandle,
pub response: Option<&'a BrowserResponse>,
pub session: Option<&'a Session>,
pub proxy: Option<&'a ProxyInfo>,
}
pub type BrowserPreNavigationHook = Arc<
dyn for<'a> Fn(BrowserPreHookCtx<'a>) -> BoxFuture<'a, Result<(), CrawlError>> + Send + Sync,
>;
pub type BrowserPostNavigationHook = Arc<
dyn for<'a> Fn(BrowserPostHookCtx<'a>) -> BoxFuture<'a, Result<(), CrawlError>> + Send + Sync,
>;