(&mut self)
| 159 | } |
| 160 | |
| 161 | fn parse_value(&mut self) -> Result<JsonValue, JsonError> { |
| 162 | self.skip_whitespace(); |
| 163 | match self.peek() { |
| 164 | Some('n') => self.parse_literal("null", JsonValue::Null), |
| 165 | Some('t') => self.parse_literal("true", JsonValue::Bool(true)), |
| 166 | Some('f') => self.parse_literal("false", JsonValue::Bool(false)), |
| 167 | Some('"') => self.parse_string().map(JsonValue::String), |
| 168 | Some('[') => self.parse_array(), |
| 169 | Some('{') => self.parse_object(), |
| 170 | Some('-' | '0'..='9') => self.parse_number().map(JsonValue::Number), |
| 171 | Some(other) => Err(JsonError::new(format!("unexpected character: {other}"))), |
| 172 | None => Err(JsonError::new("unexpected end of input")), |
| 173 | } |
| 174 | } |
| 175 | |
| 176 | fn parse_literal(&mut self, expected: &str, value: JsonValue) -> Result<JsonValue, JsonError> { |
| 177 | for expected_char in expected.chars() { |
no test coverage detected