(input: ParseStream)
| 1031 | } |
| 1032 | |
| 1033 | fn parse_literal_ok(input: ParseStream) -> Result { |
| 1034 | let mut row = Row::default(); |
| 1035 | let mut packer = row.packer(); |
| 1036 | |
| 1037 | let typ = if input.eat(kw::null) { |
| 1038 | packer.push(Datum::Null); |
| 1039 | input.parse::<syn::Token![::]>()?; |
| 1040 | ReprColumnType { |
| 1041 | scalar_type: analyses::parse_scalar_type(input)?, |
| 1042 | nullable: true, |
| 1043 | } |
| 1044 | } else { |
| 1045 | match input.parse::<syn::Lit>()? { |
| 1046 | syn::Lit::Str(l) => { |
| 1047 | packer.push(Datum::from(l.value().as_str())); |
| 1048 | Ok(ReprColumnType::from(&String::as_column_type())) |
| 1049 | } |
| 1050 | syn::Lit::Int(l) => { |
| 1051 | packer.push(Datum::from(l.base10_parse::<i64>()?)); |
| 1052 | Ok(ReprColumnType::from(&i64::as_column_type())) |
| 1053 | } |
| 1054 | syn::Lit::Float(l) => { |
| 1055 | packer.push(Datum::from(l.base10_parse::<f64>()?)); |
| 1056 | Ok(ReprColumnType::from(&f64::as_column_type())) |
| 1057 | } |
| 1058 | syn::Lit::Bool(l) => { |
| 1059 | packer.push(Datum::from(l.value)); |
| 1060 | Ok(ReprColumnType::from(&bool::as_column_type())) |
| 1061 | } |
| 1062 | _ => Err(Error::new(input.span(), "cannot parse literal")), |
| 1063 | }? |
| 1064 | }; |
| 1065 | |
| 1066 | Ok(MirScalarExpr::Literal(Ok(row), typ)) |
| 1067 | } |
| 1068 | fn parse_literal_err(input: ParseStream) -> Result { |
| 1069 | input.parse::<kw::error>()?; |
| 1070 | let mut msg = { |
no test coverage detected