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}