Parse a counted bound, restoring position when it is not one. */
(&mut self)
| 93 | |
| 94 | /* Parse a counted bound, restoring position when it is not one. */ |
| 95 | fn try_bound(&mut self) -> Result<Option<(usize, Option<usize>)>, ParseError> { |
| 96 | let save = self.pos; |
| 97 | self.bump(); // opening brace |
| 98 | let lo = self.read_int(); |
| 99 | match self.peek() { |
| 100 | Some('}') => match lo { |
| 101 | Some(n) => { self.bump(); Ok(Some((n, Some(n)))) } |
| 102 | None => { self.pos = save; Ok(None) } |
| 103 | }, |
| 104 | Some(',') => { |
| 105 | self.bump(); |
| 106 | let hi = self.read_int(); |
| 107 | if self.peek() == Some('}') { |
| 108 | self.bump(); |
| 109 | Ok(Some((lo.unwrap_or(0), hi))) |
| 110 | } else { |
| 111 | self.pos = save; |
| 112 | Ok(None) |
| 113 | } |
| 114 | } |
| 115 | _ => { self.pos = save; Ok(None) } |
| 116 | } |
| 117 | } |
| 118 | |
| 119 | fn read_int(&mut self) -> Option<usize> { |
| 120 | let start = self.pos; |
no test coverage detected