1 //! Bookkeeping to make sure only one long-running operation is executed.
3 pub(crate) struct OpQueue<D> {
4 op_scheduled: Option<D>,
8 impl<D> Default for OpQueue<D> {
10 Self { op_scheduled: None, op_in_progress: false }
15 pub(crate) fn request_op(&mut self, data: D) {
16 self.op_scheduled = Some(data);
18 pub(crate) fn should_start_op(&mut self) -> Option<D> {
19 if self.op_in_progress {
22 self.op_in_progress = self.op_scheduled.is_some();
23 self.op_scheduled.take()
25 pub(crate) fn op_completed(&mut self) {
26 assert!(self.op_in_progress);
27 self.op_in_progress = false;