1
2use crate::{
3 ParseIterator,
4 recorder::Recorder
5};
6
7#[derive(Debug)]
8pub struct Stop<'a, T> {
9 inner: &'a mut T
10}
11
12impl<'a, T> Stop<'a, T> {
13 pub(super) fn new(inner: &'a mut T) -> Self {
14 Self {inner}
15 }
16}
17
18impl<'s, 'a, T> ParseIterator<'s> for Stop<'a, T>
19where T: ParseIterator<'s> {
20
21 type PointInTime = T::PointInTime;
22
23 fn slice(&self) -> &'s [u8] {
24 self.inner.slice()
25 }
26
27 fn pit(&self) -> Self::PointInTime {
28 self.inner.pit()
29 }
30
31 fn restore_pit(&mut self, pit: Self::PointInTime) {
32 self.inner.restore_pit(pit)
33 }
34
35 fn advance(&mut self) -> Option<()> {
36 None }
38
39 fn recorder(&self) -> Option<&Recorder> {
40 self.inner.recorder()
41 }
42
43 #[inline]
44 unsafe fn is_valid_utf8() -> bool {
45 T::is_valid_utf8()
46 }
47
48}
49
50
51
52#[cfg(test)]
53mod tests {
54
55 use crate::*;
56
57 #[test]
58 fn test_stop() {
59
60 let mut parser = StrParser::new("123456789");
61 let mut parser = parser.record();
62
63 parser.consume_len(5).unwrap();
64 assert_eq!("12345", parser.to_str());
65 assert_eq!( "12345", parser.stop().consume_to_str() );
66
67 }
68
69}