Parse a literal value (numbers, strings, date/time, booleans)
(&mut self)
| 6826 | |
| 6827 | /// Parse a literal value (numbers, strings, date/time, booleans) |
| 6828 | fn parse_value(&mut self) -> Result<Value, ParserError> { |
| 6829 | match self.next_token() { |
| 6830 | Some(t) => match t { |
| 6831 | Token::Keyword(TRUE) => Ok(Value::Boolean(true)), |
| 6832 | Token::Keyword(FALSE) => Ok(Value::Boolean(false)), |
| 6833 | Token::Keyword(NULL) => Ok(Value::Null), |
| 6834 | Token::Keyword(INTERVAL) => Ok(Value::Interval(self.parse_interval_value()?)), |
| 6835 | Token::Keyword(kw) => { |
| 6836 | parser_err!( |
| 6837 | self, |
| 6838 | self.peek_prev_pos(), |
| 6839 | format!("No value parser for keyword {}", kw) |
| 6840 | ) |
| 6841 | } |
| 6842 | Token::Op(ref op) if op == "-" => match self.next_token() { |
| 6843 | Some(Token::Number(n)) => Ok(Value::Number(format!("-{}", n))), |
| 6844 | other => self.expected(self.peek_prev_pos(), "literal int", other), |
| 6845 | }, |
| 6846 | Token::Number(ref n) => Ok(Value::Number(n.to_string())), |
| 6847 | Token::String(ref s) => Ok(Value::String(s.to_string())), |
| 6848 | Token::HexString(ref s) => Ok(Value::HexString(s.to_string())), |
| 6849 | _ => parser_err!( |
| 6850 | self, |
| 6851 | self.peek_prev_pos(), |
| 6852 | format!("Unsupported value: {:?}", t) |
| 6853 | ), |
| 6854 | }, |
| 6855 | None => parser_err!( |
| 6856 | self, |
| 6857 | self.peek_prev_pos(), |
| 6858 | "Expecting a value, but found EOF" |
| 6859 | ), |
| 6860 | } |
| 6861 | } |
| 6862 | |
| 6863 | fn parse_array(&mut self) -> Result<Expr<Raw>, ParserError> { |
| 6864 | if self.consume_token(&Token::LParen) { |
no test coverage detected