diff --git a/src/de.rs b/src/de.rs index 8cb7ae0..d02103c 100644 --- a/src/de.rs +++ b/src/de.rs @@ -11,6 +11,8 @@ use std::io; use std::marker::PhantomData; use std::{i32, u64}; +use std::result; +use std::str::FromStr; use serde::de::{self, Expected, Unexpected}; @@ -481,9 +483,7 @@ impl<'de, R: Read<'de>> Deserializer { Ok(if positive { 0.0 } else { -0.0 }) } - // Not public API. Should be pub(crate). - #[doc(hidden)] - pub fn parse_any_signed_number(&mut self) -> Result { + fn parse_any_signed_number(&mut self) -> Result { let peek = match try!(self.peek()) { Some(b) => b, None => { @@ -910,6 +910,16 @@ impl<'de, R: Read<'de>> Deserializer { } } +impl FromStr for super::Number { + type Err = Error; + + fn from_str(s: &str) -> result::Result { + Deserializer::from_str(s) + .parse_any_signed_number() + .map(|n| n.into()) + } +} + #[cfg_attr(rustfmt, rustfmt_skip)] static POW10: [f64; 309] = [1e000, 1e001, 1e002, 1e003, 1e004, 1e005, 1e006, 1e007, 1e008, 1e009, diff --git a/src/number.rs b/src/number.rs index 833dcfe..69f2911 100644 --- a/src/number.rs +++ b/src/number.rs @@ -11,7 +11,6 @@ use serde::de::{self, Unexpected, Visitor}; use serde::{Deserialize, Deserializer, Serialize, Serializer}; use std::fmt::{self, Debug, Display}; use std::i64; -use std::str::FromStr; #[cfg(feature = "arbitrary_precision")] use dtoa; @@ -644,16 +643,6 @@ impl<'de> Deserializer<'de> for NumberFieldDeserializer { } } -impl FromStr for Number { - type Err = Error; - - fn from_str(s: &str) -> Result { - super::de::Deserializer::from_str(s) - .parse_any_signed_number() - .map(|n| n.into()) - } -} - impl From for Number { fn from(value: super::de::Number) -> Self { let n = match value {