changeset 14:4122b5f7562b

state: Fix peek() method
author Lewin Bormann <lewin@lewin-bormann.info>
date Mon, 03 Jun 2019 23:14:01 +0200
parents 5eb364ffbdcb
children 36e01274a263
files src/state.rs
diffstat 1 files changed, 13 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/state.rs	Sun Jun 02 23:11:00 2019 +0200
+++ b/src/state.rs	Mon Jun 03 23:14:01 2019 +0200
@@ -106,16 +106,20 @@
         }
     }
     pub fn peek(&mut self) -> Option<Iter::Item> {
-        if self.current + 1 < self.buf.len() {
-            Some(self.buf[self.current + 1])
-        } else {
-            let c = self.next();
-            if c == None {
-                return None;
+        if self.current < self.buf.len() {
+            return Some(self.buf[self.current]);
+        } else if self.current == self.buf.len() && self.next.is_some() {
+            match self.next() {
+                Some(c) => {
+                    self.current -= 1;
+                    return Some(c);
+                }
+                None => return None,
             }
-            self.current -= 1;
-            c
+        } else if self.next.is_none() {
+            return None;
         }
+        unreachable!()
     }
 }
 
@@ -147,7 +151,7 @@
     use crate::parser::Parser;
 
     #[test]
-    fn init() {
+    fn test_basic() {
         let mut s = ParseState::new("Hello");
         assert_eq!(Some('H'), s.next());
         let rest: String = s.collect();