sark_json/segment/document/
release.rs1use std::{num::NonZero, ops::ControlFlow, task::Poll};
2
3use crate::segment::Document;
4
5#[must_use = "step or release the retained owners"]
7pub struct Release<'d> {
8 pub(super) document: Document<'d>,
9}
10
11impl Release<'_> {
12 pub fn step(mut self, budget: NonZero<usize>) -> ControlFlow<(), Self> {
16 let mut left = budget.get();
17 if self.retire(&mut left).is_ready() {
18 ControlFlow::Break(())
19 } else {
20 ControlFlow::Continue(self)
21 }
22 }
23
24 pub fn retire(&mut self, budget: &mut usize) -> Poll<()> {
25 self.document.retire(budget)
26 }
27
28 pub(in crate::segment) fn drain(
29 &mut self,
30 budget: &mut usize,
31 ) -> (Poll<()>, crate::segment::scanner::Released) {
32 self.document.drain(budget)
33 }
34}