use std::{num::NonZero, ops::ControlFlow, task::Poll};
use crate::segment::Document;
#[must_use = "step or release the retained owners"]
pub struct Release<'d> {
pub(super) document: Document<'d>,
}
impl Release<'_> {
pub fn step(mut self, budget: NonZero<usize>) -> ControlFlow<(), Self> {
let mut left = budget.get();
if self.retire(&mut left).is_ready() {
ControlFlow::Break(())
} else {
ControlFlow::Continue(self)
}
}
pub fn retire(&mut self, budget: &mut usize) -> Poll<()> {
self.document.retire(budget)
}
pub(in crate::segment) fn drain(
&mut self,
budget: &mut usize,
) -> (Poll<()>, crate::segment::scanner::Released) {
self.document.drain(budget)
}
}