jwalk/core/
run_context.rs
1use std::sync::atomic::{AtomicBool, Ordering as AtomicOrdering};
2use std::sync::Arc;
3
4use super::{ClientState, Ordered, OrderedQueue, ReadDir, ReadDirCallback, ReadDirSpec};
5use crate::Result;
6
7pub(crate) struct RunContext<C: ClientState> {
8 pub(crate) stop: Arc<AtomicBool>,
9 pub(crate) read_dir_spec_queue: OrderedQueue<ReadDirSpec<C>>,
10 pub(crate) read_dir_result_queue: OrderedQueue<Result<ReadDir<C>>>,
11 pub(crate) core_read_dir_callback: Arc<ReadDirCallback<C>>,
12}
13
14impl<C: ClientState> RunContext<C> {
15 pub(crate) fn stop(&self) {
16 self.stop.store(true, AtomicOrdering::SeqCst);
17 }
18
19 pub(crate) fn schedule_read_dir_spec(&self, ordered_read_dir: Ordered<ReadDirSpec<C>>) -> bool {
20 self.read_dir_spec_queue.push(ordered_read_dir).is_ok()
21 }
22
23 pub(crate) fn send_read_dir_result(
24 &self,
25 read_dir_result: Ordered<Result<ReadDir<C>>>,
26 ) -> bool {
27 self.read_dir_result_queue.push(read_dir_result).is_ok()
28 }
29
30 pub(crate) fn complete_item(&self) {
31 self.read_dir_spec_queue.complete_item()
32 }
33}
34
35impl<C: ClientState> Clone for RunContext<C> {
36 fn clone(&self) -> Self {
37 RunContext {
38 stop: self.stop.clone(),
39 read_dir_spec_queue: self.read_dir_spec_queue.clone(),
40 read_dir_result_queue: self.read_dir_result_queue.clone(),
41 core_read_dir_callback: self.core_read_dir_callback.clone(),
42 }
43 }
44}