1use reqwest::{Client, Url};
2use scraper::{ElementRef, Html};
3use std::sync::Arc;
4
5pub type Handler<'a> = Box<dyn FnMut(&HandlerArgs) + Send + Sync + 'a>;
7
8pub type Propagator<'a> = Box<dyn FnMut(&HandlerArgs) -> Vec<Url> + Send + Sync + 'a>;
10
11#[derive(Clone)]
13pub struct HandlerArgs<'a> {
14 pub page: &'a Page,
16 pub element: Option<ElementRef<'a>>,
18 pub client: Arc<Client>,
20}
21
22#[derive(Clone, Eq, PartialEq)]
24pub struct Page {
25 pub url: Url,
27 pub text: String,
29 pub doc: Html,
31 pub depth: usize,
33}
34
35#[derive(Clone, Eq, PartialEq, Hash)]
37pub enum HandlerEvent {
38 OnSelector(String),
40 OnPage,
42}