byte_parser/
stop.rs

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 // stopped so don't continue
37	}
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}