| 653 | } |
| 654 | } |
| 655 | fn string(&mut self) -> Option<String> { |
| 656 | if self.bump() != Some(b'"') { return None; } |
| 657 | let start = self.pos; |
| 658 | while let Some(c) = self.peek() { |
| 659 | if c == b'"' { |
| 660 | let s = std::str::from_utf8(&self.bytes[start..self.pos]).ok()?.to_string(); |
| 661 | self.bump(); |
| 662 | return Some(s); |
| 663 | } |
| 664 | if c == b'\\' { self.bump(); } // skip escape + next char |
| 665 | self.bump(); |
| 666 | } |
| 667 | None |
| 668 | } |
| 669 | fn number(&mut self) -> Option<f64> { |
| 670 | let start = self.pos; |
| 671 | if self.peek() == Some(b'-') { self.bump(); } |