(&mut self)
| 45 | } |
| 46 | |
| 47 | pub fn next_token(&mut self) -> Result<Token, JsonError> { |
| 48 | self.skip_ws(); |
| 49 | if self.pos >= self.src.len() { return Ok(Token::Eof); } |
| 50 | let c = self.src[self.pos]; |
| 51 | match c { |
| 52 | b'{' => { self.pos += 1; Ok(Token::LBrace) } |
| 53 | b'}' => { self.pos += 1; Ok(Token::RBrace) } |
| 54 | b'[' => { self.pos += 1; Ok(Token::LBracket) } |
| 55 | b']' => { self.pos += 1; Ok(Token::RBracket) } |
| 56 | b',' => { self.pos += 1; Ok(Token::Comma) } |
| 57 | b':' => { self.pos += 1; Ok(Token::Colon) } |
| 58 | b'"' => self.read_string(), |
| 59 | b'-' => self.read_number_or_neg_infinity(), |
| 60 | b'0'..=b'9' => self.read_number(), |
| 61 | b't' => self.read_keyword(b"true", Token::True), |
| 62 | b'f' => self.read_keyword(b"false", Token::False), |
| 63 | b'n' => self.read_keyword(b"null", Token::Null), |
| 64 | b'N' => self.read_keyword(b"NaN", Token::Constant("NaN".to_string())), |
| 65 | b'I' => self.read_keyword(b"Infinity", Token::Constant("Infinity".to_string())), |
| 66 | _ => Err(self.err("unexpected character")), |
| 67 | } |
| 68 | } |
| 69 | |
| 70 | fn read_keyword(&mut self, kw: &[u8], tok: Token) -> Result<Token, JsonError> { |
| 71 | if self.src.len() < self.pos + kw.len() || &self.src[self.pos..self.pos + kw.len()] != kw { |
no test coverage detected