Support no_std in forward_to_deserialize macro
This commit is contained in:
parent
2a2891d54b
commit
d36f28971c
@ -1,3 +1,154 @@
|
|||||||
|
#[cfg(feature = "std")]
|
||||||
|
#[doc(hidden)]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! forward_to_deserialize_method {
|
||||||
|
($func:ident($($arg:ty),*)) => {
|
||||||
|
#[inline]
|
||||||
|
fn $func<__V>(&mut self, $(_: $arg,)* visitor: __V) -> ::std::result::Result<__V::Value, Self::Error>
|
||||||
|
where __V: $crate::de::Visitor
|
||||||
|
{
|
||||||
|
self.deserialize(visitor)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "std"))]
|
||||||
|
#[doc(hidden)]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! forward_to_deserialize_method {
|
||||||
|
($func:ident($($arg:ty),*)) => {
|
||||||
|
#[inline]
|
||||||
|
fn $func<__V>(&mut self, $(_: $arg,)* visitor: __V) -> ::core::result::Result<__V::Value, Self::Error>
|
||||||
|
where __V: $crate::de::Visitor
|
||||||
|
{
|
||||||
|
self.deserialize(visitor)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "std")]
|
||||||
|
#[doc(hidden)]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! forward_to_deserialize_enum {
|
||||||
|
() => {
|
||||||
|
#[inline]
|
||||||
|
fn deserialize_enum<__V>(&mut self, _: &str, _: &[&str], _: __V) -> ::std::result::Result<__V::Value, Self::Error>
|
||||||
|
where __V: $crate::de::EnumVisitor
|
||||||
|
{
|
||||||
|
Err($crate::de::Error::invalid_type($crate::de::Type::Enum))
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "std"))]
|
||||||
|
#[doc(hidden)]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! forward_to_deserialize_enum {
|
||||||
|
() => {
|
||||||
|
#[inline]
|
||||||
|
fn deserialize_enum<__V>(&mut self, _: &str, _: &[&str], _: __V) -> ::core::result::Result<__V::Value, Self::Error>
|
||||||
|
where __V: $crate::de::EnumVisitor
|
||||||
|
{
|
||||||
|
Err($crate::de::Error::invalid_type($crate::de::Type::Enum))
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! forward_to_deserialize_helper {
|
||||||
|
(bool) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_bool()}
|
||||||
|
};
|
||||||
|
(usize) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_usize()}
|
||||||
|
};
|
||||||
|
(u8) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_u8()}
|
||||||
|
};
|
||||||
|
(u16) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_u16()}
|
||||||
|
};
|
||||||
|
(u32) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_u32()}
|
||||||
|
};
|
||||||
|
(u64) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_u64()}
|
||||||
|
};
|
||||||
|
(isize) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_isize()}
|
||||||
|
};
|
||||||
|
(i8) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_i8()}
|
||||||
|
};
|
||||||
|
(i16) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_i16()}
|
||||||
|
};
|
||||||
|
(i32) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_i32()}
|
||||||
|
};
|
||||||
|
(i64) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_i64()}
|
||||||
|
};
|
||||||
|
(f32) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_f32()}
|
||||||
|
};
|
||||||
|
(f64) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_f64()}
|
||||||
|
};
|
||||||
|
(char) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_char()}
|
||||||
|
};
|
||||||
|
(str) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_str()}
|
||||||
|
};
|
||||||
|
(string) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_string()}
|
||||||
|
};
|
||||||
|
(unit) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_unit()}
|
||||||
|
};
|
||||||
|
(option) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_option()}
|
||||||
|
};
|
||||||
|
(seq) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_seq()}
|
||||||
|
};
|
||||||
|
(seq_fixed_size) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_seq_fixed_size(usize)}
|
||||||
|
};
|
||||||
|
(bytes) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_bytes()}
|
||||||
|
};
|
||||||
|
(map) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_map()}
|
||||||
|
};
|
||||||
|
(unit_struct) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_unit_struct(&'static str)}
|
||||||
|
};
|
||||||
|
(newtype_struct) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_newtype_struct(&'static str)}
|
||||||
|
};
|
||||||
|
(tuple_struct) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_tuple_struct(&'static str, usize)}
|
||||||
|
};
|
||||||
|
(struct) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_struct(&'static str, &'static [&'static str])}
|
||||||
|
};
|
||||||
|
(struct_field) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_struct_field()}
|
||||||
|
};
|
||||||
|
(tuple) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_tuple(usize)}
|
||||||
|
};
|
||||||
|
(ignored_any) => {
|
||||||
|
forward_to_deserialize_method!{deserialize_ignored_any()}
|
||||||
|
};
|
||||||
|
(enum) => {
|
||||||
|
forward_to_deserialize_enum!();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/// Helper to forward `Deserializer` methods to `Deserializer::deserialize`.
|
/// Helper to forward `Deserializer` methods to `Deserializer::deserialize`.
|
||||||
/// Every given method ignores all arguments and forwards to `deserialize`.
|
/// Every given method ignores all arguments and forwards to `deserialize`.
|
||||||
/// Note that `deserialize_enum` simply returns an `Error::invalid_type`; a
|
/// Note that `deserialize_enum` simply returns an `Error::invalid_type`; a
|
||||||
@ -22,111 +173,7 @@
|
|||||||
/// [1]: https://github.com/serde-rs/serde/issues/521
|
/// [1]: https://github.com/serde-rs/serde/issues/521
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! forward_to_deserialize {
|
macro_rules! forward_to_deserialize {
|
||||||
(@func bool) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_bool()}
|
|
||||||
};
|
|
||||||
(@func usize) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_usize()}
|
|
||||||
};
|
|
||||||
(@func u8) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_u8()}
|
|
||||||
};
|
|
||||||
(@func u16) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_u16()}
|
|
||||||
};
|
|
||||||
(@func u32) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_u32()}
|
|
||||||
};
|
|
||||||
(@func u64) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_u64()}
|
|
||||||
};
|
|
||||||
(@func isize) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_isize()}
|
|
||||||
};
|
|
||||||
(@func i8) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_i8()}
|
|
||||||
};
|
|
||||||
(@func i16) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_i16()}
|
|
||||||
};
|
|
||||||
(@func i32) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_i32()}
|
|
||||||
};
|
|
||||||
(@func i64) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_i64()}
|
|
||||||
};
|
|
||||||
(@func f32) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_f32()}
|
|
||||||
};
|
|
||||||
(@func f64) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_f64()}
|
|
||||||
};
|
|
||||||
(@func char) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_char()}
|
|
||||||
};
|
|
||||||
(@func str) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_str()}
|
|
||||||
};
|
|
||||||
(@func string) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_string()}
|
|
||||||
};
|
|
||||||
(@func unit) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_unit()}
|
|
||||||
};
|
|
||||||
(@func option) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_option()}
|
|
||||||
};
|
|
||||||
(@func seq) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_seq()}
|
|
||||||
};
|
|
||||||
(@func seq_fixed_size) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_seq_fixed_size(usize)}
|
|
||||||
};
|
|
||||||
(@func bytes) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_bytes()}
|
|
||||||
};
|
|
||||||
(@func map) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_map()}
|
|
||||||
};
|
|
||||||
(@func unit_struct) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_unit_struct(&'static str)}
|
|
||||||
};
|
|
||||||
(@func newtype_struct) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_newtype_struct(&'static str)}
|
|
||||||
};
|
|
||||||
(@func tuple_struct) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_tuple_struct(&'static str, usize)}
|
|
||||||
};
|
|
||||||
(@func struct) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_struct(&'static str, &'static [&'static str])}
|
|
||||||
};
|
|
||||||
(@func struct_field) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_struct_field()}
|
|
||||||
};
|
|
||||||
(@func tuple) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_tuple(usize)}
|
|
||||||
};
|
|
||||||
(@func enum) => {
|
|
||||||
#[inline]
|
|
||||||
fn deserialize_enum<__V>(&mut self, _: &str, _: &[&str], _: __V) -> ::std::result::Result<__V::Value, Self::Error>
|
|
||||||
where __V: $crate::de::EnumVisitor
|
|
||||||
{
|
|
||||||
Err($crate::de::Error::invalid_type($crate::de::Type::Enum))
|
|
||||||
}
|
|
||||||
};
|
|
||||||
(@func ignored_any) => {
|
|
||||||
forward_to_deserialize!{@forward deserialize_ignored_any()}
|
|
||||||
};
|
|
||||||
(@forward $func:ident($($arg:ty),*)) => {
|
|
||||||
#[inline]
|
|
||||||
fn $func<__V>(&mut self, $(_: $arg,)* visitor: __V) -> ::std::result::Result<__V::Value, Self::Error>
|
|
||||||
where __V: $crate::de::Visitor
|
|
||||||
{
|
|
||||||
self.deserialize(visitor)
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
($($func:ident)*) => {
|
($($func:ident)*) => {
|
||||||
$(forward_to_deserialize!{@func $func})*
|
$(forward_to_deserialize_helper!{$func})*
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user