Skip to content

Commit

Permalink
Silence problematic non_local_definitions behavior around references (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
jonasbb committed Feb 28, 2024
2 parents e0bf71b + 9503718 commit 5be9e7c
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 105 deletions.
54 changes: 25 additions & 29 deletions serde_with/src/content/ser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -253,9 +253,9 @@ where
Ok(Content::None)
}

fn serialize_some<T: ?Sized>(self, value: &T) -> Result<Content, E>
fn serialize_some<T>(self, value: &T) -> Result<Content, E>
where
T: Serialize,
T: Serialize + ?Sized,
{
Ok(Content::Some(Box::new(value.serialize(self)?)))
}
Expand All @@ -277,29 +277,25 @@ where
Ok(Content::UnitVariant(name, variant_index, variant))
}

fn serialize_newtype_struct<T: ?Sized>(
self,
name: &'static str,
value: &T,
) -> Result<Content, E>
fn serialize_newtype_struct<T>(self, name: &'static str, value: &T) -> Result<Content, E>
where
T: Serialize,
T: Serialize + ?Sized,
{
Ok(Content::NewtypeStruct(
name,
Box::new(value.serialize(self)?),
))
}

fn serialize_newtype_variant<T: ?Sized>(
fn serialize_newtype_variant<T>(
self,
name: &'static str,
variant_index: u32,
variant: &'static str,
value: &T,
) -> Result<Content, E>
where
T: Serialize,
T: Serialize + ?Sized,
{
Ok(Content::NewtypeVariant(
name,
Expand Down Expand Up @@ -404,9 +400,9 @@ where
type Ok = Content;
type Error = E;

fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), E>
fn serialize_element<T>(&mut self, value: &T) -> Result<(), E>
where
T: Serialize,
T: Serialize + ?Sized,
{
let value = value.serialize(ContentSerializer::<E>::new(self.is_human_readable))?;
self.elements.push(value);
Expand All @@ -431,9 +427,9 @@ where
type Ok = Content;
type Error = E;

fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), E>
fn serialize_element<T>(&mut self, value: &T) -> Result<(), E>
where
T: Serialize,
T: Serialize + ?Sized,
{
let value = value.serialize(ContentSerializer::<E>::new(self.is_human_readable))?;
self.elements.push(value);
Expand All @@ -459,9 +455,9 @@ where
type Ok = Content;
type Error = E;

fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), E>
fn serialize_field<T>(&mut self, value: &T) -> Result<(), E>
where
T: Serialize,
T: Serialize + ?Sized,
{
let value = value.serialize(ContentSerializer::<E>::new(self.is_human_readable))?;
self.fields.push(value);
Expand Down Expand Up @@ -489,9 +485,9 @@ where
type Ok = Content;
type Error = E;

fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), E>
fn serialize_field<T>(&mut self, value: &T) -> Result<(), E>
where
T: Serialize,
T: Serialize + ?Sized,
{
let value = value.serialize(ContentSerializer::<E>::new(self.is_human_readable))?;
self.fields.push(value);
Expand Down Expand Up @@ -522,18 +518,18 @@ where
type Ok = Content;
type Error = E;

fn serialize_key<T: ?Sized>(&mut self, key: &T) -> Result<(), E>
fn serialize_key<T>(&mut self, key: &T) -> Result<(), E>
where
T: Serialize,
T: Serialize + ?Sized,
{
let key = key.serialize(ContentSerializer::<E>::new(self.is_human_readable))?;
self.key = Some(key);
Ok(())
}

fn serialize_value<T: ?Sized>(&mut self, value: &T) -> Result<(), E>
fn serialize_value<T>(&mut self, value: &T) -> Result<(), E>
where
T: Serialize,
T: Serialize + ?Sized,
{
let key = self
.key
Expand All @@ -548,10 +544,10 @@ where
Ok(Content::Map(self.entries))
}

fn serialize_entry<K: ?Sized, V: ?Sized>(&mut self, key: &K, value: &V) -> Result<(), E>
fn serialize_entry<K, V>(&mut self, key: &K, value: &V) -> Result<(), E>
where
K: Serialize,
V: Serialize,
K: Serialize + ?Sized,
V: Serialize + ?Sized,
{
let key = key.serialize(ContentSerializer::<E>::new(self.is_human_readable))?;
let value = value.serialize(ContentSerializer::<E>::new(self.is_human_readable))?;
Expand All @@ -574,9 +570,9 @@ where
type Ok = Content;
type Error = E;

fn serialize_field<T: ?Sized>(&mut self, key: &'static str, value: &T) -> Result<(), E>
fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), E>
where
T: Serialize,
T: Serialize + ?Sized,
{
let value = value.serialize(ContentSerializer::<E>::new(self.is_human_readable))?;
self.fields.push((key, value));
Expand Down Expand Up @@ -604,9 +600,9 @@ where
type Ok = Content;
type Error = E;

fn serialize_field<T: ?Sized>(&mut self, key: &'static str, value: &T) -> Result<(), E>
fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), E>
where
T: Serialize,
T: Serialize + ?Sized,
{
let value = value.serialize(ContentSerializer::<E>::new(self.is_human_readable))?;
self.fields.push((key, value));
Expand Down
40 changes: 18 additions & 22 deletions serde_with/src/enum_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -302,9 +302,9 @@ where
Err(SerError::custom("wrong type for EnumMap"))
}

fn serialize_some<T: ?Sized>(self, _value: &T) -> Result<Self::Ok, Self::Error>
fn serialize_some<T>(self, _value: &T) -> Result<Self::Ok, Self::Error>
where
T: Serialize,
T: Serialize + ?Sized,
{
Err(SerError::custom("wrong type for EnumMap"))
}
Expand All @@ -326,26 +326,26 @@ where
Err(SerError::custom("wrong type for EnumMap"))
}

fn serialize_newtype_struct<T: ?Sized>(
fn serialize_newtype_struct<T>(
self,
_name: &'static str,
_value: &T,
) -> Result<Self::Ok, Self::Error>
where
T: Serialize,
T: Serialize + ?Sized,
{
Err(SerError::custom("wrong type for EnumMap"))
}

fn serialize_newtype_variant<T: ?Sized>(
fn serialize_newtype_variant<T>(
self,
_name: &'static str,
_variant_index: u32,
_variant: &'static str,
_value: &T,
) -> Result<Self::Ok, Self::Error>
where
T: Serialize,
T: Serialize + ?Sized,
{
Err(SerError::custom("wrong type for EnumMap"))
}
Expand Down Expand Up @@ -422,9 +422,9 @@ where
type Ok = M::Ok;
type Error = M::Error;

fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error>
fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
where
T: Serialize,
T: Serialize + ?Sized,
{
value.serialize(EnumAsMapElementSerializer {
delegate: &mut self.delegate,
Expand Down Expand Up @@ -530,9 +530,9 @@ where
Err(SerError::custom("wrong type for EnumMap"))
}

fn serialize_some<T: ?Sized>(self, _value: &T) -> Result<Self::Ok, Self::Error>
fn serialize_some<T>(self, _value: &T) -> Result<Self::Ok, Self::Error>
where
T: Serialize,
T: Serialize + ?Sized,
{
Err(SerError::custom("wrong type for EnumMap"))
}
Expand All @@ -555,26 +555,26 @@ where
Ok(())
}

fn serialize_newtype_struct<T: ?Sized>(
fn serialize_newtype_struct<T>(
self,
_name: &'static str,
_value: &T,
) -> Result<Self::Ok, Self::Error>
where
T: Serialize,
T: Serialize + ?Sized,
{
Err(SerError::custom("wrong type for EnumMap"))
}

fn serialize_newtype_variant<T: ?Sized>(
fn serialize_newtype_variant<T>(
self,
_name: &'static str,
_variant_index: u32,
variant: &'static str,
value: &T,
) -> Result<Self::Ok, Self::Error>
where
T: Serialize,
T: Serialize + ?Sized,
{
self.delegate.serialize_entry(variant, value)?;
Ok(())
Expand Down Expand Up @@ -657,13 +657,9 @@ where

type Error = M::Error;

fn serialize_field<T: ?Sized>(
&mut self,
key: &'static str,
value: &T,
) -> Result<(), Self::Error>
fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
where
T: Serialize,
T: Serialize + ?Sized,
{
// Serialize to a Content type first
let value: Content = value.serialize(ContentSerializer::new(self.is_human_readable))?;
Expand All @@ -686,9 +682,9 @@ where

type Error = M::Error;

fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error>
fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
where
T: Serialize,
T: Serialize + ?Sized,
{
// Serialize to a Content type first
let value: Content = value.serialize(ContentSerializer::new(self.is_human_readable))?;
Expand Down

0 comments on commit 5be9e7c

Please sign in to comment.