use futures_util::future::BoxFuture;
use millipede_core::{
errors::CrawlError,
http_client::{HttpRequest, HttpResponse},
proxy::ProxyInfo,
request::Request,
session::Session,
};
use std::sync::Arc;
#[non_exhaustive]
pub struct HttpPreHookCtx<'a> {
pub request: &'a Request,
pub http_request: &'a mut HttpRequest,
pub session: Option<&'a Session>,
pub proxy: Option<&'a ProxyInfo>,
}
#[non_exhaustive]
pub struct HttpPostHookCtx<'a> {
pub request: &'a Request,
pub response: &'a HttpResponse,
pub session: Option<&'a Session>,
pub proxy: Option<&'a ProxyInfo>,
}
pub type HttpPreNavigationHook =
Arc<dyn for<'a> Fn(HttpPreHookCtx<'a>) -> BoxFuture<'a, Result<(), CrawlError>> + Send + Sync>;
pub type HttpPostNavigationHook =
Arc<dyn for<'a> Fn(HttpPostHookCtx<'a>) -> BoxFuture<'a, Result<(), CrawlError>> + Send + Sync>;