Skip to content

Commit 4afa668

Browse files
authored
Merge pull request #620 from xb284524239/master
Fix the characteristic that the trim() and trim_end() functions do not remove the \0 character.
2 parents edab427 + 7cdd312 commit 4afa668

File tree

1 file changed

+41
-36
lines changed

1 file changed

+41
-36
lines changed

core/src/value/primitive.rs

Lines changed: 41 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -909,7 +909,7 @@ impl PrimitiveValue {
909909
{
910910
match self {
911911
PrimitiveValue::Str(s) => {
912-
s.trim()
912+
s.trim_matches(whitespace_or_null)
913913
.parse()
914914
.context(ParseIntegerSnafu)
915915
.map_err(|err| ConvertValueError {
@@ -919,7 +919,7 @@ impl PrimitiveValue {
919919
})
920920
}
921921
PrimitiveValue::Strs(s) if !s.is_empty() => s[0]
922-
.trim()
922+
.trim_matches(whitespace_or_null)
923923
.parse()
924924
.context(ParseIntegerSnafu)
925925
.map_err(|err| ConvertValueError {
@@ -1078,7 +1078,7 @@ impl PrimitiveValue {
10781078
match self {
10791079
PrimitiveValue::Empty => Ok(Vec::new()),
10801080
PrimitiveValue::Str(s) => {
1081-
let out = s.trim().parse().context(ParseIntegerSnafu).map_err(|err| {
1081+
let out = s.trim_matches(whitespace_or_null).parse().context(ParseIntegerSnafu).map_err(|err| {
10821082
ConvertValueError {
10831083
requested: "integer",
10841084
original: self.value_type(),
@@ -1090,7 +1090,7 @@ impl PrimitiveValue {
10901090
PrimitiveValue::Strs(s) => {
10911091
s.iter()
10921092
.map(|v| {
1093-
v.trim().parse().context(ParseIntegerSnafu).map_err(|err| {
1093+
v.trim_matches(whitespace_or_null).parse().context(ParseIntegerSnafu).map_err(|err| {
10941094
ConvertValueError {
10951095
requested: "integer",
10961096
original: self.value_type(),
@@ -1256,7 +1256,7 @@ impl PrimitiveValue {
12561256
pub fn to_float32(&self) -> Result<f32, ConvertValueError> {
12571257
match self {
12581258
PrimitiveValue::Str(s) => {
1259-
s.trim()
1259+
s.trim_matches(whitespace_or_null)
12601260
.parse()
12611261
.context(ParseFloatSnafu)
12621262
.map_err(|err| ConvertValueError {
@@ -1266,7 +1266,7 @@ impl PrimitiveValue {
12661266
})
12671267
}
12681268
PrimitiveValue::Strs(s) if !s.is_empty() => s[0]
1269-
.trim()
1269+
.trim_matches(whitespace_or_null)
12701270
.parse()
12711271
.context(ParseFloatSnafu)
12721272
.map_err(|err| ConvertValueError {
@@ -1426,7 +1426,7 @@ impl PrimitiveValue {
14261426
PrimitiveValue::Empty => Ok(Vec::new()),
14271427
PrimitiveValue::Str(s) => {
14281428
let out =
1429-
s.trim()
1429+
s.trim_matches(whitespace_or_null)
14301430
.parse()
14311431
.context(ParseFloatSnafu)
14321432
.map_err(|err| ConvertValueError {
@@ -1439,7 +1439,7 @@ impl PrimitiveValue {
14391439
PrimitiveValue::Strs(s) => s
14401440
.iter()
14411441
.map(|v| {
1442-
v.trim()
1442+
v.trim_matches(whitespace_or_null)
14431443
.parse()
14441444
.context(ParseFloatSnafu)
14451445
.map_err(|err| ConvertValueError {
@@ -1622,7 +1622,7 @@ impl PrimitiveValue {
16221622
pub fn to_float64(&self) -> Result<f64, ConvertValueError> {
16231623
match self {
16241624
PrimitiveValue::Str(s) => {
1625-
s.trim()
1625+
s.trim_matches(whitespace_or_null)
16261626
.parse()
16271627
.context(ParseFloatSnafu)
16281628
.map_err(|err| ConvertValueError {
@@ -1632,7 +1632,7 @@ impl PrimitiveValue {
16321632
})
16331633
}
16341634
PrimitiveValue::Strs(s) if !s.is_empty() => s[0]
1635-
.trim()
1635+
.trim_matches(whitespace_or_null)
16361636
.parse()
16371637
.context(ParseFloatSnafu)
16381638
.map_err(|err| ConvertValueError {
@@ -1791,7 +1791,7 @@ impl PrimitiveValue {
17911791
match self {
17921792
PrimitiveValue::Str(s) => {
17931793
let out =
1794-
s.trim()
1794+
s.trim_matches(whitespace_or_null)
17951795
.parse()
17961796
.context(ParseFloatSnafu)
17971797
.map_err(|err| ConvertValueError {
@@ -1804,7 +1804,7 @@ impl PrimitiveValue {
18041804
PrimitiveValue::Strs(s) => s
18051805
.iter()
18061806
.map(|v| {
1807-
v.trim()
1807+
v.trim_matches(whitespace_or_null)
18081808
.parse()
18091809
.context(ParseFloatSnafu)
18101810
.map_err(|err| ConvertValueError {
@@ -2104,7 +2104,7 @@ impl PrimitiveValue {
21042104
original: self.value_type(),
21052105
cause: Some(Box::from(err)),
21062106
}),
2107-
PrimitiveValue::Str(s) => super::deserialize::parse_date(s.trim_end().as_bytes())
2107+
PrimitiveValue::Str(s) => super::deserialize::parse_date(s.trim_end_matches(whitespace_or_null).as_bytes())
21082108
.map(|date| vec![date])
21092109
.context(ParseDateSnafu)
21102110
.map_err(|err| ConvertValueError {
@@ -2114,7 +2114,7 @@ impl PrimitiveValue {
21142114
}),
21152115
PrimitiveValue::Strs(s) => s
21162116
.into_iter()
2117-
.map(|s| super::deserialize::parse_date(s.trim_end().as_bytes()))
2117+
.map(|s| super::deserialize::parse_date(s.trim_end_matches(whitespace_or_null).as_bytes()))
21182118
.collect::<Result<Vec<_>, _>>()
21192119
.context(ParseDateSnafu)
21202120
.map_err(|err| ConvertValueError {
@@ -2262,7 +2262,7 @@ impl PrimitiveValue {
22622262
match self {
22632263
PrimitiveValue::Date(d) => Ok(d.to_vec()),
22642264
PrimitiveValue::Str(s) => {
2265-
super::deserialize::parse_date_partial(s.trim_end().as_bytes())
2265+
super::deserialize::parse_date_partial(s.trim_end_matches(whitespace_or_null).as_bytes())
22662266
.map(|(date, _)| vec![date])
22672267
.context(ParseDateSnafu)
22682268
.map_err(|err| ConvertValueError {
@@ -2274,7 +2274,7 @@ impl PrimitiveValue {
22742274
PrimitiveValue::Strs(s) => s
22752275
.into_iter()
22762276
.map(|s| {
2277-
super::deserialize::parse_date_partial(s.trim_end().as_bytes())
2277+
super::deserialize::parse_date_partial(s.trim_end_matches(whitespace_or_null).as_bytes())
22782278
.map(|(date, _rest)| date)
22792279
})
22802280
.collect::<Result<Vec<_>, _>>()
@@ -2353,7 +2353,7 @@ impl PrimitiveValue {
23532353
original: self.value_type(),
23542354
cause: Some(Box::from(err)),
23552355
}),
2356-
PrimitiveValue::Str(s) => super::deserialize::parse_time(s.trim_end().as_bytes())
2356+
PrimitiveValue::Str(s) => super::deserialize::parse_time(s.trim_end_matches(whitespace_or_null).as_bytes())
23572357
.map(|(date, _rest)| date)
23582358
.context(ParseTimeSnafu)
23592359
.map_err(|err| ConvertValueError {
@@ -2362,7 +2362,7 @@ impl PrimitiveValue {
23622362
cause: Some(Box::from(err)),
23632363
}),
23642364
PrimitiveValue::Strs(s) => super::deserialize::parse_time(
2365-
s.first().map(|s| s.trim_end().as_bytes()).unwrap_or(&[]),
2365+
s.first().map(|s| s.trim_end_matches(whitespace_or_null).as_bytes()).unwrap_or(&[]),
23662366
)
23672367
.map(|(date, _rest)| date)
23682368
.context(ParseTimeSnafu)
@@ -2450,7 +2450,7 @@ impl PrimitiveValue {
24502450
original: self.value_type(),
24512451
cause: Some(Box::from(err)),
24522452
}),
2453-
PrimitiveValue::Str(s) => super::deserialize::parse_time(s.trim_end().as_bytes())
2453+
PrimitiveValue::Str(s) => super::deserialize::parse_time(s.trim_end_matches(whitespace_or_null).as_bytes())
24542454
.map(|(date, _rest)| vec![date])
24552455
.context(ParseDateSnafu)
24562456
.map_err(|err| ConvertValueError {
@@ -2461,7 +2461,7 @@ impl PrimitiveValue {
24612461
PrimitiveValue::Strs(s) => s
24622462
.into_iter()
24632463
.map(|s| {
2464-
super::deserialize::parse_time(s.trim_end().as_bytes())
2464+
super::deserialize::parse_time(s.trim_end_matches(whitespace_or_null).as_bytes())
24652465
.map(|(date, _rest)| date)
24662466
})
24672467
.collect::<Result<Vec<_>, _>>()
@@ -2566,7 +2566,7 @@ impl PrimitiveValue {
25662566
match self {
25672567
PrimitiveValue::Time(t) if !t.is_empty() => Ok(t[0]),
25682568
PrimitiveValue::Str(s) => {
2569-
super::deserialize::parse_time_partial(s.trim_end().as_bytes())
2569+
super::deserialize::parse_time_partial(s.trim_end_matches(whitespace_or_null).as_bytes())
25702570
.map(|(date, _rest)| date)
25712571
.context(ParseTimeSnafu)
25722572
.map_err(|err| ConvertValueError {
@@ -2576,7 +2576,7 @@ impl PrimitiveValue {
25762576
})
25772577
}
25782578
PrimitiveValue::Strs(s) => super::deserialize::parse_time_partial(
2579-
s.first().map(|s| s.trim_end().as_bytes()).unwrap_or(&[]),
2579+
s.first().map(|s| s.trim_end_matches(whitespace_or_null).as_bytes()).unwrap_or(&[]),
25802580
)
25812581
.map(|(date, _rest)| date)
25822582
.context(ParseTimeSnafu)
@@ -2646,7 +2646,7 @@ impl PrimitiveValue {
26462646
match self {
26472647
PrimitiveValue::Time(t) => Ok(t.to_vec()),
26482648
PrimitiveValue::Str(s) => {
2649-
super::deserialize::parse_time_partial(s.trim_end().as_bytes())
2649+
super::deserialize::parse_time_partial(s.trim_end_matches(whitespace_or_null).as_bytes())
26502650
.map(|(date, _rest)| vec![date])
26512651
.context(ParseDateSnafu)
26522652
.map_err(|err| ConvertValueError {
@@ -2658,7 +2658,7 @@ impl PrimitiveValue {
26582658
PrimitiveValue::Strs(s) => s
26592659
.into_iter()
26602660
.map(|s| {
2661-
super::deserialize::parse_time_partial(s.trim_end().as_bytes())
2661+
super::deserialize::parse_time_partial(s.trim_end_matches(whitespace_or_null).as_bytes())
26622662
.map(|(date, _rest)| date)
26632663
})
26642664
.collect::<Result<Vec<_>, _>>()
@@ -2772,7 +2772,7 @@ impl PrimitiveValue {
27722772
match self {
27732773
PrimitiveValue::DateTime(v) if !v.is_empty() => Ok(v[0]),
27742774
PrimitiveValue::Str(s) => {
2775-
super::deserialize::parse_datetime_partial(s.trim_end().as_bytes())
2775+
super::deserialize::parse_datetime_partial(s.trim_end_matches(whitespace_or_null).as_bytes())
27762776
.context(ParseDateTimeSnafu)
27772777
.map_err(|err| ConvertValueError {
27782778
requested: "DicomDateTime",
@@ -2781,7 +2781,7 @@ impl PrimitiveValue {
27812781
})
27822782
}
27832783
PrimitiveValue::Strs(s) => super::deserialize::parse_datetime_partial(
2784-
s.first().map(|s| s.trim_end().as_bytes()).unwrap_or(&[]),
2784+
s.first().map(|s| s.trim_end_matches(whitespace_or_null).as_bytes()).unwrap_or(&[]),
27852785
)
27862786
.context(ParseDateTimeSnafu)
27872787
.map_err(|err| ConvertValueError {
@@ -2812,7 +2812,7 @@ impl PrimitiveValue {
28122812
match self {
28132813
PrimitiveValue::DateTime(v) => Ok(v.to_vec()),
28142814
PrimitiveValue::Str(s) => {
2815-
super::deserialize::parse_datetime_partial(s.trim_end().as_bytes())
2815+
super::deserialize::parse_datetime_partial(s.trim_end_matches(whitespace_or_null).as_bytes())
28162816
.map(|date| vec![date])
28172817
.context(ParseDateSnafu)
28182818
.map_err(|err| ConvertValueError {
@@ -2823,7 +2823,7 @@ impl PrimitiveValue {
28232823
}
28242824
PrimitiveValue::Strs(s) => s
28252825
.into_iter()
2826-
.map(|s| super::deserialize::parse_datetime_partial(s.trim_end().as_bytes()))
2826+
.map(|s| super::deserialize::parse_datetime_partial(s.trim_end_matches(whitespace_or_null).as_bytes()))
28272827
.collect::<Result<Vec<_>, _>>()
28282828
.context(ParseDateSnafu)
28292829
.map_err(|err| ConvertValueError {
@@ -2895,15 +2895,15 @@ impl PrimitiveValue {
28952895
original: self.value_type(),
28962896
cause: Some(Box::from(err)),
28972897
}),
2898-
PrimitiveValue::Str(s) => super::range::parse_date_range(s.trim_end().as_bytes())
2898+
PrimitiveValue::Str(s) => super::range::parse_date_range(s.trim_end_matches(whitespace_or_null).as_bytes())
28992899
.context(ParseDateRangeSnafu)
29002900
.map_err(|err| ConvertValueError {
29012901
requested: "DateRange",
29022902
original: self.value_type(),
29032903
cause: Some(Box::from(err)),
29042904
}),
29052905
PrimitiveValue::Strs(s) => super::range::parse_date_range(
2906-
s.first().map(|s| s.trim_end().as_bytes()).unwrap_or(&[]),
2906+
s.first().map(|s| s.trim_end_matches(whitespace_or_null).as_bytes()).unwrap_or(&[]),
29072907
)
29082908
.context(ParseDateRangeSnafu)
29092909
.map_err(|err| ConvertValueError {
@@ -2978,15 +2978,15 @@ impl PrimitiveValue {
29782978
original: self.value_type(),
29792979
cause: Some(Box::from(err)),
29802980
}),
2981-
PrimitiveValue::Str(s) => super::range::parse_time_range(s.trim_end().as_bytes())
2981+
PrimitiveValue::Str(s) => super::range::parse_time_range(s.trim_end_matches(whitespace_or_null).as_bytes())
29822982
.context(ParseTimeRangeSnafu)
29832983
.map_err(|err| ConvertValueError {
29842984
requested: "TimeRange",
29852985
original: self.value_type(),
29862986
cause: Some(Box::from(err)),
29872987
}),
29882988
PrimitiveValue::Strs(s) => super::range::parse_time_range(
2989-
s.first().map(|s| s.trim_end().as_bytes()).unwrap_or(&[]),
2989+
s.first().map(|s| s.trim_end_matches(whitespace_or_null).as_bytes()).unwrap_or(&[]),
29902990
)
29912991
.context(ParseTimeRangeSnafu)
29922992
.map_err(|err| ConvertValueError {
@@ -3092,15 +3092,15 @@ impl PrimitiveValue {
30923092
original: self.value_type(),
30933093
cause: Some(Box::from(err)),
30943094
}),
3095-
PrimitiveValue::Str(s) => super::range::parse_datetime_range(s.trim_end().as_bytes())
3095+
PrimitiveValue::Str(s) => super::range::parse_datetime_range(s.trim_end_matches(whitespace_or_null).as_bytes())
30963096
.context(ParseDateTimeRangeSnafu)
30973097
.map_err(|err| ConvertValueError {
30983098
requested: "DateTimeRange",
30993099
original: self.value_type(),
31003100
cause: Some(Box::from(err)),
31013101
}),
31023102
PrimitiveValue::Strs(s) => super::range::parse_datetime_range(
3103-
s.first().map(|s| s.trim_end().as_bytes()).unwrap_or(&[]),
3103+
s.first().map(|s| s.trim_end_matches(whitespace_or_null).as_bytes()).unwrap_or(&[]),
31043104
)
31053105
.context(ParseDateTimeRangeSnafu)
31063106
.map_err(|err| ConvertValueError {
@@ -3197,7 +3197,7 @@ impl PrimitiveValue {
31973197
cause: Some(Box::from(err)),
31983198
}),
31993199
PrimitiveValue::Str(s) => {
3200-
super::range::parse_datetime_range_custom::<T>(s.trim_end().as_bytes())
3200+
super::range::parse_datetime_range_custom::<T>(s.trim_end_matches(whitespace_or_null).as_bytes())
32013201
.context(ParseDateTimeRangeSnafu)
32023202
.map_err(|err| ConvertValueError {
32033203
requested: "DateTimeRange",
@@ -3206,7 +3206,7 @@ impl PrimitiveValue {
32063206
})
32073207
}
32083208
PrimitiveValue::Strs(s) => super::range::parse_datetime_range_custom::<T>(
3209-
s.first().map(|s| s.trim_end().as_bytes()).unwrap_or(&[]),
3209+
s.first().map(|s| s.trim_end_matches(whitespace_or_null).as_bytes()).unwrap_or(&[]),
32103210
)
32113211
.context(ParseDateTimeRangeSnafu)
32123212
.map_err(|err| ConvertValueError {
@@ -4349,6 +4349,11 @@ fn trim_last_whitespace(x: &[u8]) -> &[u8] {
43494349
}
43504350
}
43514351

4352+
#[inline]
4353+
fn whitespace_or_null(c: char) -> bool {
4354+
c.is_whitespace() || c == '\0'
4355+
}
4356+
43524357
#[cfg(test)]
43534358
mod tests {
43544359
use super::{CastValueError, ConvertValueError, InvalidValueReadError};

0 commit comments

Comments
 (0)