From 8afacb9051e7a22db08752ea7867ce8cf3b5e83a Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Fri, 27 Mar 2020 21:55:34 -0700 Subject: [PATCH] Improve error message when neither std nor alloc is enabled --- src/map.rs | 8 +++++--- src/value/de.rs | 9 +++++++++ src/value/ser.rs | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/map.rs b/src/map.rs index be87122..c523fcf 100644 --- a/src/map.rs +++ b/src/map.rs @@ -10,7 +10,7 @@ use crate::lib::borrow::Borrow; use crate::lib::iter::FromIterator; use crate::lib::*; use crate::value::Value; -use serde::{de, ser}; +use serde::de; #[cfg(feature = "preserve_order")] use indexmap::{self, IndexMap}; @@ -289,11 +289,12 @@ impl Debug for Map { } } -impl ser::Serialize for Map { +#[cfg(any(feature = "std", feature = "alloc"))] +impl serde::ser::Serialize for Map { #[inline] fn serialize(&self, serializer: S) -> Result where - S: ser::Serializer, + S: serde::ser::Serializer, { use serde::ser::SerializeMap; let mut map = tri!(serializer.serialize_map(Some(self.len()))); @@ -327,6 +328,7 @@ impl<'de> de::Deserialize<'de> for Map { Ok(Map::new()) } + #[cfg(any(feature = "std", feature = "alloc"))] #[inline] fn visit_map(self, mut visitor: V) -> Result where diff --git a/src/value/de.rs b/src/value/de.rs index 6672338..d9ef592 100644 --- a/src/value/de.rs +++ b/src/value/de.rs @@ -48,6 +48,7 @@ impl<'de> Deserialize<'de> for Value { Ok(Number::from_f64(value).map_or(Value::Null, Value::Number)) } + #[cfg(any(feature = "std", feature = "alloc"))] #[inline] fn visit_str(self, value: &str) -> Result where @@ -56,6 +57,7 @@ impl<'de> Deserialize<'de> for Value { self.visit_string(String::from(value)) } + #[cfg(any(feature = "std", feature = "alloc"))] #[inline] fn visit_string(self, value: String) -> Result { Ok(Value::String(value)) @@ -93,6 +95,7 @@ impl<'de> Deserialize<'de> for Value { Ok(Value::Array(vec)) } + #[cfg(any(feature = "std", feature = "alloc"))] fn visit_map(self, mut visitor: V) -> Result where V: MapAccess<'de>, @@ -208,6 +211,7 @@ impl<'de> serde::Deserializer<'de> for Value { Value::Null => visitor.visit_unit(), Value::Bool(v) => visitor.visit_bool(v), Value::Number(n) => n.deserialize_any(visitor), + #[cfg(any(feature = "std", feature = "alloc"))] Value::String(v) => visitor.visit_string(v), Value::Array(v) => visit_array(v, visitor), Value::Object(v) => visit_object(v, visitor), @@ -338,6 +342,7 @@ impl<'de> serde::Deserializer<'de> for Value { V: Visitor<'de>, { match self { + #[cfg(any(feature = "std", feature = "alloc"))] Value::String(v) => visitor.visit_string(v), _ => Err(self.invalid_type(&visitor)), } @@ -355,6 +360,7 @@ impl<'de> serde::Deserializer<'de> for Value { V: Visitor<'de>, { match self { + #[cfg(any(feature = "std", feature = "alloc"))] Value::String(v) => visitor.visit_string(v), Value::Array(v) => visit_array(v, visitor), _ => Err(self.invalid_type(&visitor)), @@ -1225,6 +1231,7 @@ macro_rules! deserialize_integer_key { match (self.key.parse(), self.key) { (Ok(integer), _) => visitor.$visit(integer), (Err(_), Cow::Borrowed(s)) => visitor.visit_borrowed_str(s), + #[cfg(any(feature = "std", feature = "alloc"))] (Err(_), Cow::Owned(s)) => visitor.visit_string(s), } } @@ -1337,6 +1344,7 @@ impl<'de> Visitor<'de> for KeyClassifier { } } + #[cfg(any(feature = "std", feature = "alloc"))] fn visit_string(self, s: String) -> Result where E: de::Error, @@ -1392,6 +1400,7 @@ impl<'de> de::Deserializer<'de> for BorrowedCowStrDeserializer<'de> { { match self.value { Cow::Borrowed(string) => visitor.visit_borrowed_str(string), + #[cfg(any(feature = "std", feature = "alloc"))] Cow::Owned(string) => visitor.visit_string(string), } } diff --git a/src/value/ser.rs b/src/value/ser.rs index 04c2f83..03cb12b 100644 --- a/src/value/ser.rs +++ b/src/value/ser.rs @@ -20,6 +20,7 @@ impl Serialize for Value { Value::Number(ref n) => n.serialize(serializer), Value::String(ref s) => serializer.serialize_str(s), Value::Array(ref v) => v.serialize(serializer), + #[cfg(any(feature = "std", feature = "alloc"))] Value::Object(ref m) => { use serde::ser::SerializeMap; let mut map = tri!(serializer.serialize_map(Some(m.len())));