spider_lib/
state.rs

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