From 0a2c2b34eab437f937a7aaab2217a00fdcb4d7e8 Mon Sep 17 00:00:00 2001 From: Kaleb Elwert Date: Tue, 18 Feb 2020 17:12:56 -0800 Subject: Clean up int parsing code --- src/util/value.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/util/value.rs b/src/util/value.rs index f1bba98..846f600 100644 --- a/src/util/value.rs +++ b/src/util/value.rs @@ -1,6 +1,7 @@ use base64::{decode as base64_decode, encode as base64_encode}; use quick_xml::{events::Event, Reader, Writer}; use serde::forward_to_deserialize_any; +use std::convert::TryInto; use crate::error::ParseError; use crate::util::{ReaderExt, WriterExt}; @@ -77,14 +78,14 @@ where let val: i64 = text.parse().map_err(ParseError::from)?; - if i8::min_value() as i64 <= val && val <= i8::max_value() as i64 { - visitor.visit_i8::(text.parse().map_err(ParseError::from)?)? - } else if i16::min_value() as i64 <= val && val <= i16::max_value() as i64 { - visitor.visit_i16::(text.parse().map_err(ParseError::from)?)? - } else if i32::min_value() as i64 <= val && val <= i32::max_value() as i64 { - visitor.visit_i32::(text.parse().map_err(ParseError::from)?)? + if let Ok(val) = val.try_into() { + visitor.visit_i8::(val)? + } else if let Ok(val) = val.try_into() { + visitor.visit_i16::(val)? + } else if let Ok(val) = val.try_into() { + visitor.visit_i32::(val)? } else { - visitor.visit_i64::(text.parse().map_err(ParseError::from)?)? + visitor.visit_i64::(val)? } } -- cgit v1.2.3