Merge pull request #1263 from serde-rs/integer128
Add Serde impls for i128 and u128
This commit is contained in:
commit
b279ebb244
@ -178,3 +178,91 @@ impl_from_primitive_for_uint!(u32);
|
|||||||
impl_from_primitive_for_uint!(u64);
|
impl_from_primitive_for_uint!(u64);
|
||||||
impl_from_primitive_for_float!(f32);
|
impl_from_primitive_for_float!(f32);
|
||||||
impl_from_primitive_for_float!(f64);
|
impl_from_primitive_for_float!(f64);
|
||||||
|
|
||||||
|
serde_if_integer128! {
|
||||||
|
impl FromPrimitive for i128 {
|
||||||
|
#[inline]
|
||||||
|
fn from_i8(n: i8) -> Option<Self> {
|
||||||
|
Some(n as i128)
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_i16(n: i16) -> Option<Self> {
|
||||||
|
Some(n as i128)
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_i32(n: i32) -> Option<Self> {
|
||||||
|
Some(n as i128)
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_i64(n: i64) -> Option<Self> {
|
||||||
|
Some(n as i128)
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_u8(n: u8) -> Option<Self> {
|
||||||
|
Some(n as i128)
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_u16(n: u16) -> Option<Self> {
|
||||||
|
Some(n as i128)
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_u32(n: u32) -> Option<Self> {
|
||||||
|
Some(n as i128)
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_u64(n: u64) -> Option<Self> {
|
||||||
|
Some(n as i128)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FromPrimitive for u128 {
|
||||||
|
#[inline]
|
||||||
|
fn from_i8(n: i8) -> Option<Self> {
|
||||||
|
if n >= 0 {
|
||||||
|
Some(n as u128)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_i16(n: i16) -> Option<Self> {
|
||||||
|
if n >= 0 {
|
||||||
|
Some(n as u128)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_i32(n: i32) -> Option<Self> {
|
||||||
|
if n >= 0 {
|
||||||
|
Some(n as u128)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_i64(n: i64) -> Option<Self> {
|
||||||
|
if n >= 0 {
|
||||||
|
Some(n as u128)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_u8(n: u8) -> Option<Self> {
|
||||||
|
Some(n as u128)
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_u16(n: u16) -> Option<Self> {
|
||||||
|
Some(n as u128)
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_u32(n: u32) -> Option<Self> {
|
||||||
|
Some(n as u128)
|
||||||
|
}
|
||||||
|
#[inline]
|
||||||
|
fn from_u64(n: u64) -> Option<Self> {
|
||||||
|
Some(n as u128)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -166,6 +166,92 @@ impl_deserialize_num!(usize, deserialize_u64, integer);
|
|||||||
impl_deserialize_num!(f32, deserialize_f32, integer, float);
|
impl_deserialize_num!(f32, deserialize_f32, integer, float);
|
||||||
impl_deserialize_num!(f64, deserialize_f64, integer, float);
|
impl_deserialize_num!(f64, deserialize_f64, integer, float);
|
||||||
|
|
||||||
|
serde_if_integer128! {
|
||||||
|
impl<'de> Deserialize<'de> for i128 {
|
||||||
|
#[inline]
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
struct PrimitiveVisitor;
|
||||||
|
|
||||||
|
impl<'de> Visitor<'de> for PrimitiveVisitor {
|
||||||
|
type Value = i128;
|
||||||
|
|
||||||
|
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
formatter.write_str("i128")
|
||||||
|
}
|
||||||
|
|
||||||
|
impl_deserialize_num!(integer i128);
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn visit_i128<E>(self, v: i128) -> Result<Self::Value, E>
|
||||||
|
where
|
||||||
|
E: Error,
|
||||||
|
{
|
||||||
|
Ok(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn visit_u128<E>(self, v: u128) -> Result<Self::Value, E>
|
||||||
|
where
|
||||||
|
E: Error,
|
||||||
|
{
|
||||||
|
if v <= i128::max_value() as u128 {
|
||||||
|
Ok(v as i128)
|
||||||
|
} else {
|
||||||
|
Err(Error::invalid_value(Unexpected::Other("u128"), &self))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
deserializer.deserialize_i128(PrimitiveVisitor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'de> Deserialize<'de> for u128 {
|
||||||
|
#[inline]
|
||||||
|
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||||
|
where
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
struct PrimitiveVisitor;
|
||||||
|
|
||||||
|
impl<'de> Visitor<'de> for PrimitiveVisitor {
|
||||||
|
type Value = u128;
|
||||||
|
|
||||||
|
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
formatter.write_str("u128")
|
||||||
|
}
|
||||||
|
|
||||||
|
impl_deserialize_num!(integer u128);
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn visit_i128<E>(self, v: i128) -> Result<Self::Value, E>
|
||||||
|
where
|
||||||
|
E: Error,
|
||||||
|
{
|
||||||
|
if v >= 0 {
|
||||||
|
Ok(v as u128)
|
||||||
|
} else {
|
||||||
|
Err(Error::invalid_value(Unexpected::Other("i128"), &self))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn visit_u128<E>(self, v: u128) -> Result<Self::Value, E>
|
||||||
|
where
|
||||||
|
E: Error,
|
||||||
|
{
|
||||||
|
Ok(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
deserializer.deserialize_u128(PrimitiveVisitor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
struct CharVisitor;
|
struct CharVisitor;
|
||||||
|
@ -52,8 +52,8 @@
|
|||||||
//!
|
//!
|
||||||
//! - **Primitive types**:
|
//! - **Primitive types**:
|
||||||
//! - bool
|
//! - bool
|
||||||
//! - i8, i16, i32, i64, isize
|
//! - i8, i16, i32, i64, i128, isize
|
||||||
//! - u8, u16, u32, u64, usize
|
//! - u8, u16, u32, u64, u128, usize
|
||||||
//! - f32, f64
|
//! - f32, f64
|
||||||
//! - char
|
//! - char
|
||||||
//! - **Compound types**:
|
//! - **Compound types**:
|
||||||
@ -757,7 +757,7 @@ where
|
|||||||
/// Serde.
|
/// Serde.
|
||||||
///
|
///
|
||||||
/// The role of this trait is to define the deserialization half of the Serde
|
/// The role of this trait is to define the deserialization half of the Serde
|
||||||
/// data model, which is a way to categorize every Rust data type into one of 27
|
/// data model, which is a way to categorize every Rust data type into one of 29
|
||||||
/// possible types. Each method of the `Serializer` trait corresponds to one of
|
/// possible types. Each method of the `Serializer` trait corresponds to one of
|
||||||
/// the types of the data model.
|
/// the types of the data model.
|
||||||
///
|
///
|
||||||
@ -767,10 +767,10 @@ where
|
|||||||
///
|
///
|
||||||
/// The types that make up the Serde data model are:
|
/// The types that make up the Serde data model are:
|
||||||
///
|
///
|
||||||
/// - **12 primitive types**
|
/// - **14 primitive types**
|
||||||
/// - bool
|
/// - bool
|
||||||
/// - i8, i16, i32, i64
|
/// - i8, i16, i32, i64, i128
|
||||||
/// - u8, u16, u32, u64
|
/// - u8, u16, u32, u64, u128
|
||||||
/// - f32, f64
|
/// - f32, f64
|
||||||
/// - char
|
/// - char
|
||||||
/// - **string**
|
/// - **string**
|
||||||
@ -884,6 +884,20 @@ pub trait Deserializer<'de>: Sized {
|
|||||||
where
|
where
|
||||||
V: Visitor<'de>;
|
V: Visitor<'de>;
|
||||||
|
|
||||||
|
serde_if_integer128! {
|
||||||
|
/// Hint that the `Deserialize` type is expecting an `i128` value.
|
||||||
|
///
|
||||||
|
/// This method is available only on Rust compiler versions >=1.26. The
|
||||||
|
/// default behavior unconditionally returns an error.
|
||||||
|
fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
||||||
|
where
|
||||||
|
V: Visitor<'de>
|
||||||
|
{
|
||||||
|
let _ = visitor;
|
||||||
|
Err(Error::custom("i128 is not supported"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Hint that the `Deserialize` type is expecting a `u8` value.
|
/// Hint that the `Deserialize` type is expecting a `u8` value.
|
||||||
fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
||||||
where
|
where
|
||||||
@ -904,6 +918,20 @@ pub trait Deserializer<'de>: Sized {
|
|||||||
where
|
where
|
||||||
V: Visitor<'de>;
|
V: Visitor<'de>;
|
||||||
|
|
||||||
|
serde_if_integer128! {
|
||||||
|
/// Hint that the `Deserialize` type is expecting an `u128` value.
|
||||||
|
///
|
||||||
|
/// This method is available only on Rust compiler versions >=1.26. The
|
||||||
|
/// default behavior unconditionally returns an error.
|
||||||
|
fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
||||||
|
where
|
||||||
|
V: Visitor<'de>
|
||||||
|
{
|
||||||
|
let _ = visitor;
|
||||||
|
Err(Error::custom("u128 is not supported"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Hint that the `Deserialize` type is expecting a `f32` value.
|
/// Hint that the `Deserialize` type is expecting a `f32` value.
|
||||||
fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
||||||
where
|
where
|
||||||
@ -1250,6 +1278,20 @@ pub trait Visitor<'de>: Sized {
|
|||||||
Err(Error::invalid_type(Unexpected::Signed(v), &self))
|
Err(Error::invalid_type(Unexpected::Signed(v), &self))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
serde_if_integer128! {
|
||||||
|
/// The input contains a `i128`.
|
||||||
|
///
|
||||||
|
/// This method is available only on Rust compiler versions >=1.26. The
|
||||||
|
/// default implementation fails with a type error.
|
||||||
|
fn visit_i128<E>(self, v: i128) -> Result<Self::Value, E>
|
||||||
|
where
|
||||||
|
E: Error,
|
||||||
|
{
|
||||||
|
let _ = v;
|
||||||
|
Err(Error::invalid_type(Unexpected::Other("i128"), &self))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// The input contains a `u8`.
|
/// The input contains a `u8`.
|
||||||
///
|
///
|
||||||
/// The default implementation forwards to [`visit_u64`].
|
/// The default implementation forwards to [`visit_u64`].
|
||||||
@ -1296,6 +1338,20 @@ pub trait Visitor<'de>: Sized {
|
|||||||
Err(Error::invalid_type(Unexpected::Unsigned(v), &self))
|
Err(Error::invalid_type(Unexpected::Unsigned(v), &self))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
serde_if_integer128! {
|
||||||
|
/// The input contains a `u128`.
|
||||||
|
///
|
||||||
|
/// This method is available only on Rust compiler versions >=1.26. The
|
||||||
|
/// default implementation fails with a type error.
|
||||||
|
fn visit_u128<E>(self, v: u128) -> Result<Self::Value, E>
|
||||||
|
where
|
||||||
|
E: Error,
|
||||||
|
{
|
||||||
|
let _ = v;
|
||||||
|
Err(Error::invalid_type(Unexpected::Other("u128"), &self))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// The input contains an `f32`.
|
/// The input contains an `f32`.
|
||||||
///
|
///
|
||||||
/// The default implementation forwards to [`visit_f64`].
|
/// The default implementation forwards to [`visit_f64`].
|
||||||
|
@ -136,9 +136,9 @@ where
|
|||||||
type Error = E;
|
type Error = E;
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf unit unit_struct newtype_struct seq tuple tuple_struct map
|
bytes byte_buf unit unit_struct newtype_struct seq tuple tuple_struct
|
||||||
struct enum identifier ignored_any
|
map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
||||||
@ -189,9 +189,9 @@ macro_rules! primitive_deserializer {
|
|||||||
type Error = E;
|
type Error = E;
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple
|
string bytes byte_buf option unit unit_struct newtype_struct seq
|
||||||
tuple_struct map struct enum identifier ignored_any
|
tuple tuple_struct map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
||||||
@ -246,9 +246,9 @@ where
|
|||||||
type Error = E;
|
type Error = E;
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
map struct identifier ignored_any
|
tuple_struct map struct identifier ignored_any
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
||||||
@ -339,9 +339,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
map struct identifier ignored_any
|
tuple_struct map struct identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -408,9 +408,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
map struct identifier ignored_any
|
tuple_struct map struct identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -483,9 +483,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
map struct identifier ignored_any
|
tuple_struct map struct identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -562,9 +562,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
map struct identifier ignored_any
|
tuple_struct map struct identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -618,9 +618,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
map struct identifier ignored_any enum
|
tuple_struct map struct identifier ignored_any enum
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -688,9 +688,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
map struct enum identifier ignored_any
|
tuple_struct map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -803,9 +803,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
map struct enum identifier ignored_any
|
tuple_struct map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -917,9 +917,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct tuple_struct map struct
|
bytes byte_buf option unit unit_struct newtype_struct tuple_struct map
|
||||||
enum identifier ignored_any
|
struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1059,9 +1059,9 @@ where
|
|||||||
type Error = E;
|
type Error = E;
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct tuple_struct map struct
|
bytes byte_buf option unit unit_struct newtype_struct tuple_struct map
|
||||||
enum identifier ignored_any
|
struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
|
||||||
@ -1207,9 +1207,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
map struct enum identifier ignored_any
|
tuple_struct map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
86
serde/src/integer128.rs
Normal file
86
serde/src/integer128.rs
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/// Conditional compilation depending on whether Serde is built with support for
|
||||||
|
/// 128-bit integers.
|
||||||
|
///
|
||||||
|
/// Data formats that wish to support Rust compiler versions older than 1.26 may
|
||||||
|
/// place the i128 / u128 methods of their Serializer and Deserializer behind
|
||||||
|
/// this macro.
|
||||||
|
///
|
||||||
|
/// Data formats that require a minimum Rust compiler version of at least 1.26
|
||||||
|
/// do not need to bother with this macro and may assume support for 128-bit
|
||||||
|
/// integers.
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// #[macro_use]
|
||||||
|
/// extern crate serde;
|
||||||
|
///
|
||||||
|
/// use serde::Serializer;
|
||||||
|
/// # use serde::private::ser::Error;
|
||||||
|
/// #
|
||||||
|
/// # struct MySerializer;
|
||||||
|
///
|
||||||
|
/// impl Serializer for MySerializer {
|
||||||
|
/// type Ok = ();
|
||||||
|
/// type Error = Error;
|
||||||
|
///
|
||||||
|
/// fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error> {
|
||||||
|
/// /* ... */
|
||||||
|
/// # unimplemented!()
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// /* ... */
|
||||||
|
///
|
||||||
|
/// serde_if_integer128! {
|
||||||
|
/// fn serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error> {
|
||||||
|
/// /* ... */
|
||||||
|
/// # unimplemented!()
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// fn serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error> {
|
||||||
|
/// /* ... */
|
||||||
|
/// # unimplemented!()
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
/// #
|
||||||
|
/// # __serialize_unimplemented! {
|
||||||
|
/// # bool i8 i16 i32 u8 u16 u32 u64 f32 f64 char str bytes none some
|
||||||
|
/// # unit unit_struct unit_variant newtype_struct newtype_variant seq
|
||||||
|
/// # tuple tuple_struct tuple_variant map struct struct_variant
|
||||||
|
/// # }
|
||||||
|
/// }
|
||||||
|
/// #
|
||||||
|
/// # fn main() {}
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// When Serde is built with support for 128-bit integers, this macro expands
|
||||||
|
/// transparently into just the input tokens.
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// macro_rules! serde_if_integer128 {
|
||||||
|
/// ($($tt:tt)*) => {
|
||||||
|
/// $($tt)*
|
||||||
|
/// };
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// When built without support for 128-bit integers, this macro expands to
|
||||||
|
/// nothing.
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// macro_rules! serde_if_integer128 {
|
||||||
|
/// ($($tt:tt)*) => {};
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
#[cfg(integer128)]
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! serde_if_integer128 {
|
||||||
|
($($tt:tt)*) => {
|
||||||
|
$($tt)*
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(integer128))]
|
||||||
|
#[macro_export]
|
||||||
|
#[doc(hidden)]
|
||||||
|
macro_rules! serde_if_integer128 {
|
||||||
|
($($tt:tt)*) => {};
|
||||||
|
}
|
@ -219,6 +219,9 @@ mod lib {
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod macros;
|
mod macros;
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
mod integer128;
|
||||||
|
|
||||||
pub mod de;
|
pub mod de;
|
||||||
pub mod ser;
|
pub mod ser;
|
||||||
|
|
||||||
|
@ -46,8 +46,8 @@
|
|||||||
/// }
|
/// }
|
||||||
/// #
|
/// #
|
||||||
/// # forward_to_deserialize_any! {
|
/// # forward_to_deserialize_any! {
|
||||||
/// # i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
/// # i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
/// # byte_buf option unit unit_struct newtype_struct seq tuple
|
/// # bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
/// # tuple_struct map struct enum identifier ignored_any
|
/// # tuple_struct map struct enum identifier ignored_any
|
||||||
/// # }
|
/// # }
|
||||||
/// # }
|
/// # }
|
||||||
@ -80,8 +80,8 @@
|
|||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// forward_to_deserialize_any! {
|
/// forward_to_deserialize_any! {
|
||||||
/// bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
/// bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
/// byte_buf option unit unit_struct newtype_struct seq tuple
|
/// bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
/// tuple_struct map struct enum identifier ignored_any
|
/// tuple_struct map struct enum identifier ignored_any
|
||||||
/// }
|
/// }
|
||||||
/// }
|
/// }
|
||||||
@ -116,9 +116,9 @@
|
|||||||
/// #
|
/// #
|
||||||
/// forward_to_deserialize_any! {
|
/// forward_to_deserialize_any! {
|
||||||
/// <W: Visitor<'q>>
|
/// <W: Visitor<'q>>
|
||||||
/// bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
/// bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
/// byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
/// bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
/// map struct enum identifier ignored_any
|
/// tuple_struct map struct enum identifier ignored_any
|
||||||
/// }
|
/// }
|
||||||
/// # }
|
/// # }
|
||||||
/// #
|
/// #
|
||||||
@ -174,6 +174,11 @@ macro_rules! forward_to_deserialize_any_helper {
|
|||||||
(i64<$l:tt, $v:ident>) => {
|
(i64<$l:tt, $v:ident>) => {
|
||||||
forward_to_deserialize_any_method!{deserialize_i64<$l, $v>()}
|
forward_to_deserialize_any_method!{deserialize_i64<$l, $v>()}
|
||||||
};
|
};
|
||||||
|
(i128<$l:tt, $v:ident>) => {
|
||||||
|
serde_if_integer128! {
|
||||||
|
forward_to_deserialize_any_method!{deserialize_i128<$l, $v>()}
|
||||||
|
}
|
||||||
|
};
|
||||||
(u8<$l:tt, $v:ident>) => {
|
(u8<$l:tt, $v:ident>) => {
|
||||||
forward_to_deserialize_any_method!{deserialize_u8<$l, $v>()}
|
forward_to_deserialize_any_method!{deserialize_u8<$l, $v>()}
|
||||||
};
|
};
|
||||||
@ -186,6 +191,11 @@ macro_rules! forward_to_deserialize_any_helper {
|
|||||||
(u64<$l:tt, $v:ident>) => {
|
(u64<$l:tt, $v:ident>) => {
|
||||||
forward_to_deserialize_any_method!{deserialize_u64<$l, $v>()}
|
forward_to_deserialize_any_method!{deserialize_u64<$l, $v>()}
|
||||||
};
|
};
|
||||||
|
(u128<$l:tt, $v:ident>) => {
|
||||||
|
serde_if_integer128! {
|
||||||
|
forward_to_deserialize_any_method!{deserialize_u128<$l, $v>()}
|
||||||
|
}
|
||||||
|
};
|
||||||
(f32<$l:tt, $v:ident>) => {
|
(f32<$l:tt, $v:ident>) => {
|
||||||
forward_to_deserialize_any_method!{deserialize_f32<$l, $v>()}
|
forward_to_deserialize_any_method!{deserialize_f32<$l, $v>()}
|
||||||
};
|
};
|
||||||
|
@ -50,9 +50,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf unit unit_struct newtype_struct seq tuple tuple_struct map
|
bytes byte_buf unit unit_struct newtype_struct seq tuple
|
||||||
struct enum identifier ignored_any
|
tuple_struct map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1618,8 +1618,8 @@ mod content {
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
tuple_struct map struct enum identifier ignored_any
|
tuple_struct map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1716,8 +1716,8 @@ mod content {
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
tuple_struct map struct enum identifier ignored_any
|
tuple_struct map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2306,8 +2306,8 @@ mod content {
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
tuple_struct map struct enum identifier ignored_any
|
tuple_struct map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2406,8 +2406,8 @@ mod content {
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
tuple_struct map struct enum identifier ignored_any
|
tuple_struct map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2578,9 +2578,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
map struct enum identifier ignored_any
|
tuple_struct map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2617,9 +2617,9 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
map struct enum identifier ignored_any
|
tuple_struct map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,6 +44,11 @@ primitive_impl!(f32, serialize_f32);
|
|||||||
primitive_impl!(f64, serialize_f64);
|
primitive_impl!(f64, serialize_f64);
|
||||||
primitive_impl!(char, serialize_char);
|
primitive_impl!(char, serialize_char);
|
||||||
|
|
||||||
|
serde_if_integer128! {
|
||||||
|
primitive_impl!(i128, serialize_i128);
|
||||||
|
primitive_impl!(u128, serialize_u128);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
impl Serialize for str {
|
impl Serialize for str {
|
||||||
|
@ -48,8 +48,8 @@
|
|||||||
//!
|
//!
|
||||||
//! - **Primitive types**:
|
//! - **Primitive types**:
|
||||||
//! - bool
|
//! - bool
|
||||||
//! - i8, i16, i32, i64, isize
|
//! - i8, i16, i32, i64, i128, isize
|
||||||
//! - u8, u16, u32, u64, usize
|
//! - u8, u16, u32, u64, u128, usize
|
||||||
//! - f32, f64
|
//! - f32, f64
|
||||||
//! - char
|
//! - char
|
||||||
//! - str
|
//! - str
|
||||||
@ -245,7 +245,7 @@ pub trait Serialize {
|
|||||||
/// A **data format** that can serialize any data structure supported by Serde.
|
/// A **data format** that can serialize any data structure supported by Serde.
|
||||||
///
|
///
|
||||||
/// The role of this trait is to define the serialization half of the Serde data
|
/// The role of this trait is to define the serialization half of the Serde data
|
||||||
/// model, which is a way to categorize every Rust data structure into one of 27
|
/// model, which is a way to categorize every Rust data structure into one of 29
|
||||||
/// possible types. Each method of the `Serializer` trait corresponds to one of
|
/// possible types. Each method of the `Serializer` trait corresponds to one of
|
||||||
/// the types of the data model.
|
/// the types of the data model.
|
||||||
///
|
///
|
||||||
@ -254,10 +254,10 @@ pub trait Serialize {
|
|||||||
///
|
///
|
||||||
/// The types that make up the Serde data model are:
|
/// The types that make up the Serde data model are:
|
||||||
///
|
///
|
||||||
/// - **12 primitive types**
|
/// - **14 primitive types**
|
||||||
/// - bool
|
/// - bool
|
||||||
/// - i8, i16, i32, i64
|
/// - i8, i16, i32, i64, i128
|
||||||
/// - u8, u16, u32, u64
|
/// - u8, u16, u32, u64, u128
|
||||||
/// - f32, f64
|
/// - f32, f64
|
||||||
/// - char
|
/// - char
|
||||||
/// - **string**
|
/// - **string**
|
||||||
@ -492,6 +492,37 @@ pub trait Serializer: Sized {
|
|||||||
/// ```
|
/// ```
|
||||||
fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error>;
|
fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error>;
|
||||||
|
|
||||||
|
serde_if_integer128! {
|
||||||
|
/// Serialize an `i128` value.
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// # #[macro_use]
|
||||||
|
/// # extern crate serde;
|
||||||
|
/// #
|
||||||
|
/// # use serde::Serializer;
|
||||||
|
/// #
|
||||||
|
/// # __private_serialize!();
|
||||||
|
/// #
|
||||||
|
/// impl Serialize for i128 {
|
||||||
|
/// fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
/// where
|
||||||
|
/// S: Serializer,
|
||||||
|
/// {
|
||||||
|
/// serializer.serialize_i128(*self)
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
/// #
|
||||||
|
/// # fn main() {}
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// This method is available only on Rust compiler versions >=1.26. The
|
||||||
|
/// default behavior unconditionally returns an error.
|
||||||
|
fn serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error> {
|
||||||
|
let _ = v;
|
||||||
|
Err(Error::custom("i128 is not supported"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Serialize a `u8` value.
|
/// Serialize a `u8` value.
|
||||||
///
|
///
|
||||||
/// If the format does not differentiate between `u8` and `u64`, a
|
/// If the format does not differentiate between `u8` and `u64`, a
|
||||||
@ -596,6 +627,37 @@ pub trait Serializer: Sized {
|
|||||||
/// ```
|
/// ```
|
||||||
fn serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error>;
|
fn serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error>;
|
||||||
|
|
||||||
|
serde_if_integer128! {
|
||||||
|
/// Serialize a `u128` value.
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// # #[macro_use]
|
||||||
|
/// # extern crate serde;
|
||||||
|
/// #
|
||||||
|
/// # use serde::Serializer;
|
||||||
|
/// #
|
||||||
|
/// # __private_serialize!();
|
||||||
|
/// #
|
||||||
|
/// impl Serialize for u128 {
|
||||||
|
/// fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||||
|
/// where
|
||||||
|
/// S: Serializer,
|
||||||
|
/// {
|
||||||
|
/// serializer.serialize_u128(*self)
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
/// #
|
||||||
|
/// # fn main() {}
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// This method is available only on Rust compiler versions >=1.26. The
|
||||||
|
/// default behavior unconditionally returns an error.
|
||||||
|
fn serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error> {
|
||||||
|
let _ = v;
|
||||||
|
Err(Error::custom("u128 is not supported"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Serialize an `f32` value.
|
/// Serialize an `f32` value.
|
||||||
///
|
///
|
||||||
/// If the format does not differentiate between `f32` and `f64`, a
|
/// If the format does not differentiate between `f32` and `f64`, a
|
||||||
|
@ -129,8 +129,8 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> {
|
|||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf unit seq map identifier ignored_any
|
bytes byte_buf unit seq map identifier ignored_any
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Error>
|
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Error>
|
||||||
@ -657,8 +657,8 @@ impl<'de> de::Deserializer<'de> for BytesDeserializer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
forward_to_deserialize_any! {
|
forward_to_deserialize_any! {
|
||||||
bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
|
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
|
||||||
byte_buf option unit unit_struct newtype_struct seq tuple tuple_struct
|
bytes byte_buf option unit unit_struct newtype_struct seq tuple
|
||||||
map struct enum identifier ignored_any
|
tuple_struct map struct enum identifier ignored_any
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -259,6 +259,27 @@ declare_tests! {
|
|||||||
0f32 => &[Token::F32(0.)],
|
0f32 => &[Token::F32(0.)],
|
||||||
0f64 => &[Token::F64(0.)],
|
0f64 => &[Token::F64(0.)],
|
||||||
}
|
}
|
||||||
|
test_small_int_to_128 {
|
||||||
|
1i128 => &[Token::I8(1)],
|
||||||
|
1i128 => &[Token::I16(1)],
|
||||||
|
1i128 => &[Token::I32(1)],
|
||||||
|
1i128 => &[Token::I64(1)],
|
||||||
|
|
||||||
|
1i128 => &[Token::U8(1)],
|
||||||
|
1i128 => &[Token::U16(1)],
|
||||||
|
1i128 => &[Token::U32(1)],
|
||||||
|
1i128 => &[Token::U64(1)],
|
||||||
|
|
||||||
|
1u128 => &[Token::I8(1)],
|
||||||
|
1u128 => &[Token::I16(1)],
|
||||||
|
1u128 => &[Token::I32(1)],
|
||||||
|
1u128 => &[Token::I64(1)],
|
||||||
|
|
||||||
|
1u128 => &[Token::U8(1)],
|
||||||
|
1u128 => &[Token::U16(1)],
|
||||||
|
1u128 => &[Token::U32(1)],
|
||||||
|
1u128 => &[Token::U64(1)],
|
||||||
|
}
|
||||||
test_char {
|
test_char {
|
||||||
'a' => &[Token::Char('a')],
|
'a' => &[Token::Char('a')],
|
||||||
'a' => &[Token::Str("a")],
|
'a' => &[Token::Str("a")],
|
||||||
|
@ -586,3 +586,10 @@ fn test_enum_skipped() {
|
|||||||
"the enum variant Enum::SkippedMap cannot be serialized",
|
"the enum variant Enum::SkippedMap cannot be serialized",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_integer128() {
|
||||||
|
assert_ser_tokens_error(&1i128, &[], "i128 is not supported");
|
||||||
|
|
||||||
|
assert_ser_tokens_error(&1u128, &[], "u128 is not supported");
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user