]> git.lizzy.rs Git - rust.git/blob - crates/rust-analyzer/src/op_queue.rs
Merge #7218
[rust.git] / crates / rust-analyzer / src / op_queue.rs
1 //! Bookkeeping to make sure only one long-running operation is executed.
2
3 #[derive(Default)]
4 pub(crate) struct OpQueue {
5     op_scheduled: bool,
6     op_in_progress: bool,
7 }
8
9 impl OpQueue {
10     pub(crate) fn request_op(&mut self) {
11         self.op_scheduled = true;
12     }
13     pub(crate) fn should_start_op(&mut self) -> bool {
14         if !self.op_in_progress && self.op_scheduled {
15             self.op_in_progress = true;
16             self.op_scheduled = false;
17             return true;
18         }
19         false
20     }
21     pub(crate) fn op_completed(&mut self) {
22         assert!(self.op_in_progress);
23         self.op_in_progress = false;
24     }
25 }