@@ -34,6 +34,7 @@ use ore::lex::LexBuf;
34
34
use serde:: { Deserialize , Serialize } ;
35
35
use uuid:: Uuid ;
36
36
37
+ use ore:: ascii:: UncasedStr ;
37
38
use ore:: fmt:: FormatBuffer ;
38
39
39
40
use crate :: adt:: array:: ArrayDimension ;
@@ -126,13 +127,17 @@ where
126
127
127
128
/// Parses an `f32` from `s`.
128
129
pub fn parse_float32 ( s : & str ) -> Result < f32 , ParseError > {
129
- match s. trim ( ) . to_lowercase ( ) . as_str ( ) {
130
- "inf" | "infinity" | "+inf" | "+infinity" => Ok ( f32:: INFINITY ) ,
131
- "-inf" | "-infinity" => Ok ( f32:: NEG_INFINITY ) ,
132
- "nan" => Ok ( f32:: NAN ) ,
133
- s => s
130
+ let s = UncasedStr :: new ( s. trim ( ) ) ;
131
+ if s == "inf" || s == "infinity" || s == "+inf" || s == "+infinity" {
132
+ Ok ( f32:: INFINITY )
133
+ } else if s == "-inf" || s == "-infinity" {
134
+ Ok ( f32:: NEG_INFINITY )
135
+ } else if s == "nan" {
136
+ Ok ( f32:: NAN )
137
+ } else {
138
+ s. as_str ( )
134
139
. parse ( )
135
- . map_err ( |e| ParseError :: new ( "float4" , s) . with_details ( e) ) ,
140
+ . map_err ( |e| ParseError :: new ( "float4" , s. as_str ( ) ) . with_details ( e) )
136
141
}
137
142
}
138
143
@@ -155,13 +160,17 @@ where
155
160
156
161
/// Parses an `f64` from `s`.
157
162
pub fn parse_float64 ( s : & str ) -> Result < f64 , ParseError > {
158
- match s. trim ( ) . to_lowercase ( ) . as_str ( ) {
159
- "inf" | "infinity" | "+inf" | "+infinity" => Ok ( f64:: INFINITY ) ,
160
- "-inf" | "-infinity" => Ok ( f64:: NEG_INFINITY ) ,
161
- "nan" => Ok ( f64:: NAN ) ,
162
- s => s
163
+ let s = UncasedStr :: new ( s. trim ( ) ) ;
164
+ if s == "inf" || s == "infinity" || s == "+inf" || s == "+infinity" {
165
+ Ok ( f64:: INFINITY )
166
+ } else if s == "-inf" || s == "-infinity" {
167
+ Ok ( f64:: NEG_INFINITY )
168
+ } else if s == "nan" {
169
+ Ok ( f64:: NAN )
170
+ } else {
171
+ s. as_str ( )
163
172
. parse ( )
164
- . map_err ( |e| ParseError :: new ( "float8" , s) . with_details ( e) ) ,
173
+ . map_err ( |e| ParseError :: new ( "float8" , s. as_str ( ) ) . with_details ( e) )
165
174
}
166
175
}
167
176
0 commit comments