1use std::sync::atomic::{AtomicUsize, Ordering};
2use std::sync::Arc;
3
4#[derive(Debug, Default)]
6pub struct CrawlerState {
7 pub in_flight_requests: AtomicUsize,
9 pub parsing_responses: AtomicUsize,
11 pub processing_items: AtomicUsize,
13}
14
15impl CrawlerState {
16 pub fn new() -> Arc<Self> {
18 Arc::new(Self::default())
19 }
20
21 pub fn is_idle(&self) -> bool {
23 self.in_flight_requests.load(Ordering::SeqCst) == 0
24 && self.parsing_responses.load(Ordering::SeqCst) == 0
25 && self.processing_items.load(Ordering::SeqCst) == 0
26 }
27}