From 9f0973aff76ce1be41d77e05251c4d59b7d67e31 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 27 Jul 2017 00:35:56 -0700 Subject: [PATCH] NonZero constructor now returns Option --- serde/src/de/impls.rs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/serde/src/de/impls.rs b/serde/src/de/impls.rs index bbf47d5a..c91f431f 100644 --- a/serde/src/de/impls.rs +++ b/serde/src/de/impls.rs @@ -1573,14 +1573,9 @@ where D: Deserializer<'de>, { let value = try!(Deserialize::deserialize(deserializer)); - unsafe { - let ptr = &value as *const T as *const u8; - if slice::from_raw_parts(ptr, mem::size_of::()).iter().all(|&b| b == 0) { - return Err(Error::custom("expected a non-zero value")); - } - // Waiting for a safe way to construct NonZero: - // https://github.com/rust-lang/rust/issues/27730#issuecomment-269726075 - Ok(NonZero::new(value)) + match NonZero::new(value) { + Some(nonzero) => Ok(nonzero), + None => Err(Error::custom("expected a non-zero value")), } } }