diff --git a/serde/src/macros.rs b/serde/src/macros.rs index bffd3250..c2e43f1b 100644 --- a/serde/src/macros.rs +++ b/serde/src/macros.rs @@ -1,111 +1,3 @@ -#[doc(hidden)] -#[macro_export] -macro_rules! forward_to_deserialize_method { - ($func:ident<$l:tt, $v:ident>($($arg:ident : $ty:ty),*)) => { - #[inline] - fn $func<$v>(self, $($arg: $ty,)* visitor: $v) -> $crate::export::Result<$v::Value, Self::Error> - where $v: $crate::de::Visitor<$l> - { - $( - let _ = $arg; - )* - self.deserialize(visitor) - } - }; -} - -#[doc(hidden)] -#[macro_export] -macro_rules! forward_to_deserialize_helper { - (bool<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_bool<$l, $v>()} - }; - (u8<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_u8<$l, $v>()} - }; - (u16<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_u16<$l, $v>()} - }; - (u32<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_u32<$l, $v>()} - }; - (u64<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_u64<$l, $v>()} - }; - (i8<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_i8<$l, $v>()} - }; - (i16<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_i16<$l, $v>()} - }; - (i32<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_i32<$l, $v>()} - }; - (i64<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_i64<$l, $v>()} - }; - (f32<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_f32<$l, $v>()} - }; - (f64<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_f64<$l, $v>()} - }; - (char<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_char<$l, $v>()} - }; - (str<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_str<$l, $v>()} - }; - (string<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_string<$l, $v>()} - }; - (unit<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_unit<$l, $v>()} - }; - (option<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_option<$l, $v>()} - }; - (seq<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_seq<$l, $v>()} - }; - (seq_fixed_size<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_seq_fixed_size<$l, $v>(len: usize)} - }; - (bytes<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_bytes<$l, $v>()} - }; - (byte_buf<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_byte_buf<$l, $v>()} - }; - (map<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_map<$l, $v>()} - }; - (unit_struct<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_unit_struct<$l, $v>(name: &'static str)} - }; - (newtype_struct<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_newtype_struct<$l, $v>(name: &'static str)} - }; - (tuple_struct<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_tuple_struct<$l, $v>(name: &'static str, len: usize)} - }; - (struct<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_struct<$l, $v>(name: &'static str, fields: &'static [&'static str])} - }; - (identifier<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_identifier<$l, $v>()} - }; - (tuple<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_tuple<$l, $v>(len: usize)} - }; - (enum<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_enum<$l, $v>(name: &'static str, variants: &'static [&'static str])} - }; - (ignored_any<$l:tt, $v:ident>) => { - forward_to_deserialize_method!{deserialize_ignored_any<$l, $v>()} - }; -} - // Super explicit first paragraph because this shows up at the top level and // trips up people who are just looking for basic Serialize / Deserialize // documentation. @@ -229,7 +121,116 @@ macro_rules! forward_to_deserialize { (<$visitor:ident: Visitor<$lifetime:tt>> $($func:ident)*) => { $(forward_to_deserialize_helper!{$func<$lifetime, $visitor>})* }; + // This case must be after the previous one. ($($func:ident)*) => { $(forward_to_deserialize_helper!{$func<'de, V>})* }; } + +#[doc(hidden)] +#[macro_export] +macro_rules! forward_to_deserialize_method { + ($func:ident<$l:tt, $v:ident>($($arg:ident : $ty:ty),*)) => { + #[inline] + fn $func<$v>(self, $($arg: $ty,)* visitor: $v) -> $crate::export::Result<$v::Value, Self::Error> + where $v: $crate::de::Visitor<$l> + { + $( + let _ = $arg; + )* + self.deserialize(visitor) + } + }; +} + +#[doc(hidden)] +#[macro_export] +macro_rules! forward_to_deserialize_helper { + (bool<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_bool<$l, $v>()} + }; + (u8<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_u8<$l, $v>()} + }; + (u16<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_u16<$l, $v>()} + }; + (u32<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_u32<$l, $v>()} + }; + (u64<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_u64<$l, $v>()} + }; + (i8<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_i8<$l, $v>()} + }; + (i16<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_i16<$l, $v>()} + }; + (i32<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_i32<$l, $v>()} + }; + (i64<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_i64<$l, $v>()} + }; + (f32<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_f32<$l, $v>()} + }; + (f64<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_f64<$l, $v>()} + }; + (char<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_char<$l, $v>()} + }; + (str<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_str<$l, $v>()} + }; + (string<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_string<$l, $v>()} + }; + (unit<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_unit<$l, $v>()} + }; + (option<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_option<$l, $v>()} + }; + (seq<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_seq<$l, $v>()} + }; + (seq_fixed_size<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_seq_fixed_size<$l, $v>(len: usize)} + }; + (bytes<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_bytes<$l, $v>()} + }; + (byte_buf<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_byte_buf<$l, $v>()} + }; + (map<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_map<$l, $v>()} + }; + (unit_struct<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_unit_struct<$l, $v>(name: &'static str)} + }; + (newtype_struct<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_newtype_struct<$l, $v>(name: &'static str)} + }; + (tuple_struct<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_tuple_struct<$l, $v>(name: &'static str, len: usize)} + }; + (struct<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_struct<$l, $v>(name: &'static str, fields: &'static [&'static str])} + }; + (identifier<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_identifier<$l, $v>()} + }; + (tuple<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_tuple<$l, $v>(len: usize)} + }; + (enum<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_enum<$l, $v>(name: &'static str, variants: &'static [&'static str])} + }; + (ignored_any<$l:tt, $v:ident>) => { + forward_to_deserialize_method!{deserialize_ignored_any<$l, $v>()} + }; +} diff --git a/serde/src/private/macros.rs b/serde/src/private/macros.rs index f0e0703a..cefe0a9d 100644 --- a/serde/src/private/macros.rs +++ b/serde/src/private/macros.rs @@ -1,3 +1,14 @@ +/// Used only by Serde doc tests. Not public API. +#[doc(hidden)] +#[macro_export] +macro_rules! __serialize_unimplemented { + ($($func:ident)*) => { + $( + __serialize_unimplemented_helper!($func); + )* + }; +} + #[doc(hidden)] #[macro_export] macro_rules! __serialize_unimplemented_method { @@ -106,14 +117,3 @@ macro_rules! __serialize_unimplemented_helper { __serialize_unimplemented_method!(serialize_struct_variant(&str, u32, &str, usize) -> SerializeStructVariant); }; } - -/// Used only by Serde doc tests. Not public API. -#[doc(hidden)] -#[macro_export] -macro_rules! __serialize_unimplemented { - ($($func:ident)*) => { - $( - __serialize_unimplemented_helper!($func); - )* - }; -} diff --git a/serde/src/private/mod.rs b/serde/src/private/mod.rs index 0d46e9cc..7e0a82de 100644 --- a/serde/src/private/mod.rs +++ b/serde/src/private/mod.rs @@ -1,4 +1,4 @@ +mod macros; + pub mod ser; pub mod de; - -mod macros;