diff options
-rw-r--r-- | src/util/value.rs | 15 |
1 files changed, 8 insertions, 7 deletions
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::<Self::Error>(text.parse().map_err(ParseError::from)?)? - } else if i16::min_value() as i64 <= val && val <= i16::max_value() as i64 { - visitor.visit_i16::<Self::Error>(text.parse().map_err(ParseError::from)?)? - } else if i32::min_value() as i64 <= val && val <= i32::max_value() as i64 { - visitor.visit_i32::<Self::Error>(text.parse().map_err(ParseError::from)?)? + if let Ok(val) = val.try_into() { + visitor.visit_i8::<Self::Error>(val)? + } else if let Ok(val) = val.try_into() { + visitor.visit_i16::<Self::Error>(val)? + } else if let Ok(val) = val.try_into() { + visitor.visit_i32::<Self::Error>(val)? } else { - visitor.visit_i64::<Self::Error>(text.parse().map_err(ParseError::from)?)? + visitor.visit_i64::<Self::Error>(val)? } } |