use reqwest::{Client, Url};
use scraper::{ElementRef, Html};
use std::sync::Arc;
pub type Handler<'a> = Box<dyn FnMut(&HandlerArgs) + Send + Sync + 'a>;
pub type Propagator<'a> = Box<dyn FnMut(&HandlerArgs) -> Vec<Url> + Send + Sync + 'a>;
#[derive(Clone)]
pub struct HandlerArgs<'a> {
pub page: &'a Page,
pub element: Option<ElementRef<'a>>,
pub client: Arc<Client>,
}
#[derive(Clone, Eq, PartialEq)]
pub struct Page {
pub url: Url,
pub text: String,
pub doc: Html,
pub depth: usize,
}
#[derive(Clone, Eq, PartialEq, Hash)]
pub enum HandlerEvent {
OnSelector(String),
OnPage,
}