(&mut self)
| 846 | } |
| 847 | |
| 848 | fn parse_object(&mut self) -> Option<String> { |
| 849 | self.expect('{')?; |
| 850 | self.skip_ws(); |
| 851 | let mut entries = Vec::new(); |
| 852 | if self.peek() == Some('}') { |
| 853 | self.pos += 1; |
| 854 | return Some("{}".to_string()); |
| 855 | } |
| 856 | |
| 857 | loop { |
| 858 | self.skip_ws(); |
| 859 | let key = match self.peek()? { |
| 860 | '"' | '\'' => self.parse_quoted_string()?, |
| 861 | _ => self.parse_bare_key()?, |
| 862 | }; |
| 863 | self.skip_ws(); |
| 864 | self.expect(':')?; |
| 865 | let value = self.parse_value()?; |
| 866 | entries.push(format!("{}:{}", serde_json::to_string(&key).ok()?, value)); |
| 867 | self.skip_ws(); |
| 868 | match self.peek()? { |
| 869 | ',' => { |
| 870 | self.pos += 1; |
| 871 | } |
| 872 | '}' => { |
| 873 | self.pos += 1; |
| 874 | break; |
| 875 | } |
| 876 | _ => return None, |
| 877 | } |
| 878 | } |
| 879 | |
| 880 | Some(format!("{{{}}}", entries.join(","))) |
| 881 | } |
| 882 | |
| 883 | fn parse_array(&mut self) -> Option<String> { |
| 884 | self.expect('[')?; |
no test coverage detected