Initial vendor packages
Signed-off-by: Valentin Popov <valentin@popov.link>
This commit is contained in:
		
							
								
								
									
										30
									
								
								vendor/serde/src/de/format.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/serde/src/de/format.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
use crate::lib::fmt::{self, Write};
 | 
			
		||||
use crate::lib::str;
 | 
			
		||||
 | 
			
		||||
pub(super) struct Buf<'a> {
 | 
			
		||||
    bytes: &'a mut [u8],
 | 
			
		||||
    offset: usize,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'a> Buf<'a> {
 | 
			
		||||
    pub fn new(bytes: &'a mut [u8]) -> Self {
 | 
			
		||||
        Buf { bytes, offset: 0 }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn as_str(&self) -> &str {
 | 
			
		||||
        let slice = &self.bytes[..self.offset];
 | 
			
		||||
        unsafe { str::from_utf8_unchecked(slice) }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'a> Write for Buf<'a> {
 | 
			
		||||
    fn write_str(&mut self, s: &str) -> fmt::Result {
 | 
			
		||||
        if self.offset + s.len() > self.bytes.len() {
 | 
			
		||||
            Err(fmt::Error)
 | 
			
		||||
        } else {
 | 
			
		||||
            self.bytes[self.offset..self.offset + s.len()].copy_from_slice(s.as_bytes());
 | 
			
		||||
            self.offset += s.len();
 | 
			
		||||
            Ok(())
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										238
									
								
								vendor/serde/src/de/ignored_any.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										238
									
								
								vendor/serde/src/de/ignored_any.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,238 @@
 | 
			
		||||
use crate::lib::*;
 | 
			
		||||
 | 
			
		||||
use crate::de::{
 | 
			
		||||
    Deserialize, Deserializer, EnumAccess, Error, MapAccess, SeqAccess, VariantAccess, Visitor,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// An efficient way of discarding data from a deserializer.
 | 
			
		||||
///
 | 
			
		||||
/// Think of this like `serde_json::Value` in that it can be deserialized from
 | 
			
		||||
/// any type, except that it does not store any information about the data that
 | 
			
		||||
/// gets deserialized.
 | 
			
		||||
///
 | 
			
		||||
/// ```edition2021
 | 
			
		||||
/// use serde::de::{
 | 
			
		||||
///     self, Deserialize, DeserializeSeed, Deserializer, IgnoredAny, SeqAccess, Visitor,
 | 
			
		||||
/// };
 | 
			
		||||
/// use std::fmt;
 | 
			
		||||
/// use std::marker::PhantomData;
 | 
			
		||||
///
 | 
			
		||||
/// /// A seed that can be used to deserialize only the `n`th element of a sequence
 | 
			
		||||
/// /// while efficiently discarding elements of any type before or after index `n`.
 | 
			
		||||
/// ///
 | 
			
		||||
/// /// For example to deserialize only the element at index 3:
 | 
			
		||||
/// ///
 | 
			
		||||
/// /// ```
 | 
			
		||||
/// /// NthElement::new(3).deserialize(deserializer)
 | 
			
		||||
/// /// ```
 | 
			
		||||
/// pub struct NthElement<T> {
 | 
			
		||||
///     n: usize,
 | 
			
		||||
///     marker: PhantomData<T>,
 | 
			
		||||
/// }
 | 
			
		||||
///
 | 
			
		||||
/// impl<T> NthElement<T> {
 | 
			
		||||
///     pub fn new(n: usize) -> Self {
 | 
			
		||||
///         NthElement {
 | 
			
		||||
///             n: n,
 | 
			
		||||
///             marker: PhantomData,
 | 
			
		||||
///         }
 | 
			
		||||
///     }
 | 
			
		||||
/// }
 | 
			
		||||
///
 | 
			
		||||
/// impl<'de, T> Visitor<'de> for NthElement<T>
 | 
			
		||||
/// where
 | 
			
		||||
///     T: Deserialize<'de>,
 | 
			
		||||
/// {
 | 
			
		||||
///     type Value = T;
 | 
			
		||||
///
 | 
			
		||||
///     fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
 | 
			
		||||
///         write!(
 | 
			
		||||
///             formatter,
 | 
			
		||||
///             "a sequence in which we care about element {}",
 | 
			
		||||
///             self.n
 | 
			
		||||
///         )
 | 
			
		||||
///     }
 | 
			
		||||
///
 | 
			
		||||
///     fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
 | 
			
		||||
///     where
 | 
			
		||||
///         A: SeqAccess<'de>,
 | 
			
		||||
///     {
 | 
			
		||||
///         // Skip over the first `n` elements.
 | 
			
		||||
///         for i in 0..self.n {
 | 
			
		||||
///             // It is an error if the sequence ends before we get to element `n`.
 | 
			
		||||
///             if seq.next_element::<IgnoredAny>()?.is_none() {
 | 
			
		||||
///                 return Err(de::Error::invalid_length(i, &self));
 | 
			
		||||
///             }
 | 
			
		||||
///         }
 | 
			
		||||
///
 | 
			
		||||
///         // Deserialize the one we care about.
 | 
			
		||||
///         let nth = match seq.next_element()? {
 | 
			
		||||
///             Some(nth) => nth,
 | 
			
		||||
///             None => {
 | 
			
		||||
///                 return Err(de::Error::invalid_length(self.n, &self));
 | 
			
		||||
///             }
 | 
			
		||||
///         };
 | 
			
		||||
///
 | 
			
		||||
///         // Skip over any remaining elements in the sequence after `n`.
 | 
			
		||||
///         while let Some(IgnoredAny) = seq.next_element()? {
 | 
			
		||||
///             // ignore
 | 
			
		||||
///         }
 | 
			
		||||
///
 | 
			
		||||
///         Ok(nth)
 | 
			
		||||
///     }
 | 
			
		||||
/// }
 | 
			
		||||
///
 | 
			
		||||
/// impl<'de, T> DeserializeSeed<'de> for NthElement<T>
 | 
			
		||||
/// where
 | 
			
		||||
///     T: Deserialize<'de>,
 | 
			
		||||
/// {
 | 
			
		||||
///     type Value = T;
 | 
			
		||||
///
 | 
			
		||||
///     fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
 | 
			
		||||
///     where
 | 
			
		||||
///         D: Deserializer<'de>,
 | 
			
		||||
///     {
 | 
			
		||||
///         deserializer.deserialize_seq(self)
 | 
			
		||||
///     }
 | 
			
		||||
/// }
 | 
			
		||||
///
 | 
			
		||||
/// # fn example<'de, D>(deserializer: D) -> Result<(), D::Error>
 | 
			
		||||
/// # where
 | 
			
		||||
/// #     D: Deserializer<'de>,
 | 
			
		||||
/// # {
 | 
			
		||||
/// // Deserialize only the sequence element at index 3 from this deserializer.
 | 
			
		||||
/// // The element at index 3 is required to be a string. Elements before and
 | 
			
		||||
/// // after index 3 are allowed to be of any type.
 | 
			
		||||
/// let s: String = NthElement::new(3).deserialize(deserializer)?;
 | 
			
		||||
/// #     Ok(())
 | 
			
		||||
/// # }
 | 
			
		||||
/// ```
 | 
			
		||||
#[derive(Copy, Clone, Debug, Default, PartialEq)]
 | 
			
		||||
pub struct IgnoredAny;
 | 
			
		||||
 | 
			
		||||
impl<'de> Visitor<'de> for IgnoredAny {
 | 
			
		||||
    type Value = IgnoredAny;
 | 
			
		||||
 | 
			
		||||
    fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
 | 
			
		||||
        formatter.write_str("anything at all")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_bool<E>(self, x: bool) -> Result<Self::Value, E> {
 | 
			
		||||
        let _ = x;
 | 
			
		||||
        Ok(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_i64<E>(self, x: i64) -> Result<Self::Value, E> {
 | 
			
		||||
        let _ = x;
 | 
			
		||||
        Ok(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_i128<E>(self, x: i128) -> Result<Self::Value, E> {
 | 
			
		||||
        let _ = x;
 | 
			
		||||
        Ok(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_u64<E>(self, x: u64) -> Result<Self::Value, E> {
 | 
			
		||||
        let _ = x;
 | 
			
		||||
        Ok(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_u128<E>(self, x: u128) -> Result<Self::Value, E> {
 | 
			
		||||
        let _ = x;
 | 
			
		||||
        Ok(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_f64<E>(self, x: f64) -> Result<Self::Value, E> {
 | 
			
		||||
        let _ = x;
 | 
			
		||||
        Ok(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_str<E>(self, s: &str) -> Result<Self::Value, E>
 | 
			
		||||
    where
 | 
			
		||||
        E: Error,
 | 
			
		||||
    {
 | 
			
		||||
        let _ = s;
 | 
			
		||||
        Ok(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_none<E>(self) -> Result<Self::Value, E> {
 | 
			
		||||
        Ok(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
 | 
			
		||||
    where
 | 
			
		||||
        D: Deserializer<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        IgnoredAny::deserialize(deserializer)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_newtype_struct<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
 | 
			
		||||
    where
 | 
			
		||||
        D: Deserializer<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        IgnoredAny::deserialize(deserializer)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_unit<E>(self) -> Result<Self::Value, E> {
 | 
			
		||||
        Ok(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
 | 
			
		||||
    where
 | 
			
		||||
        A: SeqAccess<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        while let Some(IgnoredAny) = tri!(seq.next_element()) {
 | 
			
		||||
            // Gobble
 | 
			
		||||
        }
 | 
			
		||||
        Ok(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
 | 
			
		||||
    where
 | 
			
		||||
        A: MapAccess<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        while let Some((IgnoredAny, IgnoredAny)) = tri!(map.next_entry()) {
 | 
			
		||||
            // Gobble
 | 
			
		||||
        }
 | 
			
		||||
        Ok(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn visit_bytes<E>(self, bytes: &[u8]) -> Result<Self::Value, E>
 | 
			
		||||
    where
 | 
			
		||||
        E: Error,
 | 
			
		||||
    {
 | 
			
		||||
        let _ = bytes;
 | 
			
		||||
        Ok(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn visit_enum<A>(self, data: A) -> Result<Self::Value, A::Error>
 | 
			
		||||
    where
 | 
			
		||||
        A: EnumAccess<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        tri!(data.variant::<IgnoredAny>()).1.newtype_variant()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'de> Deserialize<'de> for IgnoredAny {
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn deserialize<D>(deserializer: D) -> Result<IgnoredAny, D::Error>
 | 
			
		||||
    where
 | 
			
		||||
        D: Deserializer<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        deserializer.deserialize_ignored_any(IgnoredAny)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3071
									
								
								vendor/serde/src/de/impls.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3071
									
								
								vendor/serde/src/de/impls.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2292
									
								
								vendor/serde/src/de/mod.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2292
									
								
								vendor/serde/src/de/mod.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										19
									
								
								vendor/serde/src/de/seed.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/serde/src/de/seed.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
use crate::de::{Deserialize, DeserializeSeed, Deserializer};
 | 
			
		||||
 | 
			
		||||
/// A DeserializeSeed helper for implementing deserialize_in_place Visitors.
 | 
			
		||||
///
 | 
			
		||||
/// Wraps a mutable reference and calls deserialize_in_place on it.
 | 
			
		||||
pub struct InPlaceSeed<'a, T: 'a>(pub &'a mut T);
 | 
			
		||||
 | 
			
		||||
impl<'a, 'de, T> DeserializeSeed<'de> for InPlaceSeed<'a, T>
 | 
			
		||||
where
 | 
			
		||||
    T: Deserialize<'de>,
 | 
			
		||||
{
 | 
			
		||||
    type Value = ();
 | 
			
		||||
    fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
 | 
			
		||||
    where
 | 
			
		||||
        D: Deserializer<'de>,
 | 
			
		||||
    {
 | 
			
		||||
        T::deserialize_in_place(deserializer, self.0)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										29
									
								
								vendor/serde/src/de/size_hint.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								vendor/serde/src/de/size_hint.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
use crate::lib::*;
 | 
			
		||||
 | 
			
		||||
pub fn from_bounds<I>(iter: &I) -> Option<usize>
 | 
			
		||||
where
 | 
			
		||||
    I: Iterator,
 | 
			
		||||
{
 | 
			
		||||
    helper(iter.size_hint())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(any(feature = "std", feature = "alloc"))]
 | 
			
		||||
pub fn cautious<Element>(hint: Option<usize>) -> usize {
 | 
			
		||||
    const MAX_PREALLOC_BYTES: usize = 1024 * 1024;
 | 
			
		||||
 | 
			
		||||
    if mem::size_of::<Element>() == 0 {
 | 
			
		||||
        0
 | 
			
		||||
    } else {
 | 
			
		||||
        cmp::min(
 | 
			
		||||
            hint.unwrap_or(0),
 | 
			
		||||
            MAX_PREALLOC_BYTES / mem::size_of::<Element>(),
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn helper(bounds: (usize, Option<usize>)) -> Option<usize> {
 | 
			
		||||
    match bounds {
 | 
			
		||||
        (lower, Some(upper)) if lower == upper => Some(upper),
 | 
			
		||||
        _ => None,
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1720
									
								
								vendor/serde/src/de/value.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1720
									
								
								vendor/serde/src/de/value.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										9
									
								
								vendor/serde/src/integer128.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/serde/src/integer128.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
// No longer used. Old versions of serde used this macro for supporting targets
 | 
			
		||||
// that did not yet have 128-bit integer support.
 | 
			
		||||
#[macro_export]
 | 
			
		||||
#[doc(hidden)]
 | 
			
		||||
macro_rules! serde_if_integer128 {
 | 
			
		||||
    ($($tt:tt)*) => {
 | 
			
		||||
        $($tt)*
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										334
									
								
								vendor/serde/src/lib.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										334
									
								
								vendor/serde/src/lib.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,334 @@
 | 
			
		||||
//! # Serde
 | 
			
		||||
//!
 | 
			
		||||
//! Serde is a framework for ***ser***ializing and ***de***serializing Rust data
 | 
			
		||||
//! structures efficiently and generically.
 | 
			
		||||
//!
 | 
			
		||||
//! The Serde ecosystem consists of data structures that know how to serialize
 | 
			
		||||
//! and deserialize themselves along with data formats that know how to
 | 
			
		||||
//! serialize and deserialize other things. Serde provides the layer by which
 | 
			
		||||
//! these two groups interact with each other, allowing any supported data
 | 
			
		||||
//! structure to be serialized and deserialized using any supported data format.
 | 
			
		||||
//!
 | 
			
		||||
//! See the Serde website <https://serde.rs/> for additional documentation and
 | 
			
		||||
//! usage examples.
 | 
			
		||||
//!
 | 
			
		||||
//! ## Design
 | 
			
		||||
//!
 | 
			
		||||
//! Where many other languages rely on runtime reflection for serializing data,
 | 
			
		||||
//! Serde is instead built on Rust's powerful trait system. A data structure
 | 
			
		||||
//! that knows how to serialize and deserialize itself is one that implements
 | 
			
		||||
//! Serde's `Serialize` and `Deserialize` traits (or uses Serde's derive
 | 
			
		||||
//! attribute to automatically generate implementations at compile time). This
 | 
			
		||||
//! avoids any overhead of reflection or runtime type information. In fact in
 | 
			
		||||
//! many situations the interaction between data structure and data format can
 | 
			
		||||
//! be completely optimized away by the Rust compiler, leaving Serde
 | 
			
		||||
//! serialization to perform the same speed as a handwritten serializer for the
 | 
			
		||||
//! specific selection of data structure and data format.
 | 
			
		||||
//!
 | 
			
		||||
//! ## Data formats
 | 
			
		||||
//!
 | 
			
		||||
//! The following is a partial list of data formats that have been implemented
 | 
			
		||||
//! for Serde by the community.
 | 
			
		||||
//!
 | 
			
		||||
//! - [JSON], the ubiquitous JavaScript Object Notation used by many HTTP APIs.
 | 
			
		||||
//! - [Postcard], a no\_std and embedded-systems friendly compact binary format.
 | 
			
		||||
//! - [CBOR], a Concise Binary Object Representation designed for small message
 | 
			
		||||
//!   size without the need for version negotiation.
 | 
			
		||||
//! - [YAML], a self-proclaimed human-friendly configuration language that ain't
 | 
			
		||||
//!   markup language.
 | 
			
		||||
//! - [MessagePack], an efficient binary format that resembles a compact JSON.
 | 
			
		||||
//! - [TOML], a minimal configuration format used by [Cargo].
 | 
			
		||||
//! - [Pickle], a format common in the Python world.
 | 
			
		||||
//! - [RON], a Rusty Object Notation.
 | 
			
		||||
//! - [BSON], the data storage and network transfer format used by MongoDB.
 | 
			
		||||
//! - [Avro], a binary format used within Apache Hadoop, with support for schema
 | 
			
		||||
//!   definition.
 | 
			
		||||
//! - [JSON5], a superset of JSON including some productions from ES5.
 | 
			
		||||
//! - [URL] query strings, in the x-www-form-urlencoded format.
 | 
			
		||||
//! - [Starlark], the format used for describing build targets by the Bazel and
 | 
			
		||||
//!   Buck build systems. *(serialization only)*
 | 
			
		||||
//! - [Envy], a way to deserialize environment variables into Rust structs.
 | 
			
		||||
//!   *(deserialization only)*
 | 
			
		||||
//! - [Envy Store], a way to deserialize [AWS Parameter Store] parameters into
 | 
			
		||||
//!   Rust structs. *(deserialization only)*
 | 
			
		||||
//! - [S-expressions], the textual representation of code and data used by the
 | 
			
		||||
//!   Lisp language family.
 | 
			
		||||
//! - [D-Bus]'s binary wire format.
 | 
			
		||||
//! - [FlexBuffers], the schemaless cousin of Google's FlatBuffers zero-copy
 | 
			
		||||
//!   serialization format.
 | 
			
		||||
//! - [Bencode], a simple binary format used in the BitTorrent protocol.
 | 
			
		||||
//! - [Token streams], for processing Rust procedural macro input.
 | 
			
		||||
//!   *(deserialization only)*
 | 
			
		||||
//! - [DynamoDB Items], the format used by [rusoto_dynamodb] to transfer data to
 | 
			
		||||
//!   and from DynamoDB.
 | 
			
		||||
//! - [Hjson], a syntax extension to JSON designed around human reading and
 | 
			
		||||
//!   editing. *(deserialization only)*
 | 
			
		||||
//! - [CSV], Comma-separated values is a tabular text file format.
 | 
			
		||||
//!
 | 
			
		||||
//! [JSON]: https://github.com/serde-rs/json
 | 
			
		||||
//! [Postcard]: https://github.com/jamesmunns/postcard
 | 
			
		||||
//! [CBOR]: https://github.com/enarx/ciborium
 | 
			
		||||
//! [YAML]: https://github.com/dtolnay/serde-yaml
 | 
			
		||||
//! [MessagePack]: https://github.com/3Hren/msgpack-rust
 | 
			
		||||
//! [TOML]: https://docs.rs/toml
 | 
			
		||||
//! [Pickle]: https://github.com/birkenfeld/serde-pickle
 | 
			
		||||
//! [RON]: https://github.com/ron-rs/ron
 | 
			
		||||
//! [BSON]: https://github.com/mongodb/bson-rust
 | 
			
		||||
//! [Avro]: https://docs.rs/apache-avro
 | 
			
		||||
//! [JSON5]: https://github.com/callum-oakley/json5-rs
 | 
			
		||||
//! [URL]: https://docs.rs/serde_qs
 | 
			
		||||
//! [Starlark]: https://github.com/dtolnay/serde-starlark
 | 
			
		||||
//! [Envy]: https://github.com/softprops/envy
 | 
			
		||||
//! [Envy Store]: https://github.com/softprops/envy-store
 | 
			
		||||
//! [Cargo]: https://doc.rust-lang.org/cargo/reference/manifest.html
 | 
			
		||||
//! [AWS Parameter Store]: https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html
 | 
			
		||||
//! [S-expressions]: https://github.com/rotty/lexpr-rs
 | 
			
		||||
//! [D-Bus]: https://docs.rs/zvariant
 | 
			
		||||
//! [FlexBuffers]: https://github.com/google/flatbuffers/tree/master/rust/flexbuffers
 | 
			
		||||
//! [Bencode]: https://github.com/P3KI/bendy
 | 
			
		||||
//! [Token streams]: https://github.com/oxidecomputer/serde_tokenstream
 | 
			
		||||
//! [DynamoDB Items]: https://docs.rs/serde_dynamo
 | 
			
		||||
//! [rusoto_dynamodb]: https://docs.rs/rusoto_dynamodb
 | 
			
		||||
//! [Hjson]: https://github.com/Canop/deser-hjson
 | 
			
		||||
//! [CSV]: https://docs.rs/csv
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
// Serde types in rustdoc of other crates get linked to here.
 | 
			
		||||
#![doc(html_root_url = "https://docs.rs/serde/1.0.195")]
 | 
			
		||||
// Support using Serde without the standard library!
 | 
			
		||||
#![cfg_attr(not(feature = "std"), no_std)]
 | 
			
		||||
// Show which crate feature enables conditionally compiled APIs in documentation.
 | 
			
		||||
#![cfg_attr(doc_cfg, feature(doc_cfg))]
 | 
			
		||||
// Unstable functionality only if the user asks for it. For tracking and
 | 
			
		||||
// discussion of these features please refer to this issue:
 | 
			
		||||
//
 | 
			
		||||
//    https://github.com/serde-rs/serde/issues/812
 | 
			
		||||
#![cfg_attr(feature = "unstable", feature(error_in_core, never_type))]
 | 
			
		||||
#![allow(unknown_lints, bare_trait_objects, deprecated)]
 | 
			
		||||
// Ignored clippy and clippy_pedantic lints
 | 
			
		||||
#![allow(
 | 
			
		||||
    // clippy bug: https://github.com/rust-lang/rust-clippy/issues/5704
 | 
			
		||||
    clippy::unnested_or_patterns,
 | 
			
		||||
    // clippy bug: https://github.com/rust-lang/rust-clippy/issues/7768
 | 
			
		||||
    clippy::semicolon_if_nothing_returned,
 | 
			
		||||
    // not available in our oldest supported compiler
 | 
			
		||||
    clippy::empty_enum,
 | 
			
		||||
    clippy::type_repetition_in_bounds, // https://github.com/rust-lang/rust-clippy/issues/8772
 | 
			
		||||
    // integer and float ser/de requires these sorts of casts
 | 
			
		||||
    clippy::cast_possible_truncation,
 | 
			
		||||
    clippy::cast_possible_wrap,
 | 
			
		||||
    clippy::cast_sign_loss,
 | 
			
		||||
    // things are often more readable this way
 | 
			
		||||
    clippy::cast_lossless,
 | 
			
		||||
    clippy::module_name_repetitions,
 | 
			
		||||
    clippy::single_match_else,
 | 
			
		||||
    clippy::type_complexity,
 | 
			
		||||
    clippy::use_self,
 | 
			
		||||
    clippy::zero_prefixed_literal,
 | 
			
		||||
    // correctly used
 | 
			
		||||
    clippy::derive_partial_eq_without_eq,
 | 
			
		||||
    clippy::enum_glob_use,
 | 
			
		||||
    clippy::explicit_auto_deref,
 | 
			
		||||
    clippy::let_underscore_untyped,
 | 
			
		||||
    clippy::map_err_ignore,
 | 
			
		||||
    clippy::new_without_default,
 | 
			
		||||
    clippy::result_unit_err,
 | 
			
		||||
    clippy::wildcard_imports,
 | 
			
		||||
    // not practical
 | 
			
		||||
    clippy::needless_pass_by_value,
 | 
			
		||||
    clippy::similar_names,
 | 
			
		||||
    clippy::too_many_lines,
 | 
			
		||||
    // preference
 | 
			
		||||
    clippy::doc_markdown,
 | 
			
		||||
    clippy::unseparated_literal_suffix,
 | 
			
		||||
    // false positive
 | 
			
		||||
    clippy::needless_doctest_main,
 | 
			
		||||
    // noisy
 | 
			
		||||
    clippy::missing_errors_doc,
 | 
			
		||||
    clippy::must_use_candidate,
 | 
			
		||||
)]
 | 
			
		||||
// Restrictions
 | 
			
		||||
#![deny(clippy::question_mark_used)]
 | 
			
		||||
// Rustc lints.
 | 
			
		||||
#![deny(missing_docs, unused_imports)]
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#[cfg(feature = "alloc")]
 | 
			
		||||
extern crate alloc;
 | 
			
		||||
 | 
			
		||||
/// A facade around all the types we need from the `std`, `core`, and `alloc`
 | 
			
		||||
/// crates. This avoids elaborate import wrangling having to happen in every
 | 
			
		||||
/// module.
 | 
			
		||||
mod lib {
 | 
			
		||||
    mod core {
 | 
			
		||||
        #[cfg(not(feature = "std"))]
 | 
			
		||||
        pub use core::*;
 | 
			
		||||
        #[cfg(feature = "std")]
 | 
			
		||||
        pub use std::*;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub use self::core::{f32, f64};
 | 
			
		||||
    pub use self::core::{i16, i32, i64, i8, isize};
 | 
			
		||||
    pub use self::core::{iter, num, ptr, str};
 | 
			
		||||
    pub use self::core::{u16, u32, u64, u8, usize};
 | 
			
		||||
 | 
			
		||||
    #[cfg(any(feature = "std", feature = "alloc"))]
 | 
			
		||||
    pub use self::core::{cmp, mem, slice};
 | 
			
		||||
 | 
			
		||||
    pub use self::core::cell::{Cell, RefCell};
 | 
			
		||||
    pub use self::core::clone::{self, Clone};
 | 
			
		||||
    pub use self::core::cmp::Reverse;
 | 
			
		||||
    pub use self::core::convert::{self, From, Into};
 | 
			
		||||
    pub use self::core::default::{self, Default};
 | 
			
		||||
    pub use self::core::fmt::{self, Debug, Display};
 | 
			
		||||
    pub use self::core::marker::{self, PhantomData};
 | 
			
		||||
    pub use self::core::num::Wrapping;
 | 
			
		||||
    pub use self::core::ops::{Bound, Range, RangeFrom, RangeInclusive, RangeTo};
 | 
			
		||||
    pub use self::core::option::{self, Option};
 | 
			
		||||
    pub use self::core::result::{self, Result};
 | 
			
		||||
    pub use self::core::time::Duration;
 | 
			
		||||
 | 
			
		||||
    #[cfg(all(feature = "alloc", not(feature = "std")))]
 | 
			
		||||
    pub use alloc::borrow::{Cow, ToOwned};
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::borrow::{Cow, ToOwned};
 | 
			
		||||
 | 
			
		||||
    #[cfg(all(feature = "alloc", not(feature = "std")))]
 | 
			
		||||
    pub use alloc::string::{String, ToString};
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::string::{String, ToString};
 | 
			
		||||
 | 
			
		||||
    #[cfg(all(feature = "alloc", not(feature = "std")))]
 | 
			
		||||
    pub use alloc::vec::Vec;
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::vec::Vec;
 | 
			
		||||
 | 
			
		||||
    #[cfg(all(feature = "alloc", not(feature = "std")))]
 | 
			
		||||
    pub use alloc::boxed::Box;
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::boxed::Box;
 | 
			
		||||
 | 
			
		||||
    #[cfg(all(feature = "rc", feature = "alloc", not(feature = "std")))]
 | 
			
		||||
    pub use alloc::rc::{Rc, Weak as RcWeak};
 | 
			
		||||
    #[cfg(all(feature = "rc", feature = "std"))]
 | 
			
		||||
    pub use std::rc::{Rc, Weak as RcWeak};
 | 
			
		||||
 | 
			
		||||
    #[cfg(all(feature = "rc", feature = "alloc", not(feature = "std")))]
 | 
			
		||||
    pub use alloc::sync::{Arc, Weak as ArcWeak};
 | 
			
		||||
    #[cfg(all(feature = "rc", feature = "std"))]
 | 
			
		||||
    pub use std::sync::{Arc, Weak as ArcWeak};
 | 
			
		||||
 | 
			
		||||
    #[cfg(all(feature = "alloc", not(feature = "std")))]
 | 
			
		||||
    pub use alloc::collections::{BTreeMap, BTreeSet, BinaryHeap, LinkedList, VecDeque};
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::collections::{BTreeMap, BTreeSet, BinaryHeap, LinkedList, VecDeque};
 | 
			
		||||
 | 
			
		||||
    #[cfg(all(not(no_core_cstr), not(feature = "std")))]
 | 
			
		||||
    pub use self::core::ffi::CStr;
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::ffi::CStr;
 | 
			
		||||
 | 
			
		||||
    #[cfg(all(not(no_core_cstr), feature = "alloc", not(feature = "std")))]
 | 
			
		||||
    pub use alloc::ffi::CString;
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::ffi::CString;
 | 
			
		||||
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::{error, net};
 | 
			
		||||
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::collections::{HashMap, HashSet};
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::ffi::{OsStr, OsString};
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::hash::{BuildHasher, Hash};
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::io::Write;
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::path::{Path, PathBuf};
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::sync::{Mutex, RwLock};
 | 
			
		||||
    #[cfg(feature = "std")]
 | 
			
		||||
    pub use std::time::{SystemTime, UNIX_EPOCH};
 | 
			
		||||
 | 
			
		||||
    #[cfg(all(feature = "std", no_target_has_atomic, not(no_std_atomic)))]
 | 
			
		||||
    pub use std::sync::atomic::{
 | 
			
		||||
        AtomicBool, AtomicI16, AtomicI32, AtomicI8, AtomicIsize, AtomicU16, AtomicU32, AtomicU8,
 | 
			
		||||
        AtomicUsize, Ordering,
 | 
			
		||||
    };
 | 
			
		||||
    #[cfg(all(feature = "std", no_target_has_atomic, not(no_std_atomic64)))]
 | 
			
		||||
    pub use std::sync::atomic::{AtomicI64, AtomicU64};
 | 
			
		||||
 | 
			
		||||
    #[cfg(all(feature = "std", not(no_target_has_atomic)))]
 | 
			
		||||
    pub use std::sync::atomic::Ordering;
 | 
			
		||||
    #[cfg(all(feature = "std", not(no_target_has_atomic), target_has_atomic = "8"))]
 | 
			
		||||
    pub use std::sync::atomic::{AtomicBool, AtomicI8, AtomicU8};
 | 
			
		||||
    #[cfg(all(feature = "std", not(no_target_has_atomic), target_has_atomic = "16"))]
 | 
			
		||||
    pub use std::sync::atomic::{AtomicI16, AtomicU16};
 | 
			
		||||
    #[cfg(all(feature = "std", not(no_target_has_atomic), target_has_atomic = "32"))]
 | 
			
		||||
    pub use std::sync::atomic::{AtomicI32, AtomicU32};
 | 
			
		||||
    #[cfg(all(feature = "std", not(no_target_has_atomic), target_has_atomic = "64"))]
 | 
			
		||||
    pub use std::sync::atomic::{AtomicI64, AtomicU64};
 | 
			
		||||
    #[cfg(all(feature = "std", not(no_target_has_atomic), target_has_atomic = "ptr"))]
 | 
			
		||||
    pub use std::sync::atomic::{AtomicIsize, AtomicUsize};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// None of this crate's error handling needs the `From::from` error conversion
 | 
			
		||||
// performed implicitly by the `?` operator or the standard library's `try!`
 | 
			
		||||
// macro. This simplified macro gives a 5.5% improvement in compile time
 | 
			
		||||
// compared to standard `try!`, and 9% improvement compared to `?`.
 | 
			
		||||
macro_rules! tri {
 | 
			
		||||
    ($expr:expr) => {
 | 
			
		||||
        match $expr {
 | 
			
		||||
            Ok(val) => val,
 | 
			
		||||
            Err(err) => return Err(err),
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
#[macro_use]
 | 
			
		||||
mod macros;
 | 
			
		||||
 | 
			
		||||
#[macro_use]
 | 
			
		||||
mod integer128;
 | 
			
		||||
 | 
			
		||||
pub mod de;
 | 
			
		||||
pub mod ser;
 | 
			
		||||
 | 
			
		||||
#[doc(inline)]
 | 
			
		||||
pub use crate::de::{Deserialize, Deserializer};
 | 
			
		||||
#[doc(inline)]
 | 
			
		||||
pub use crate::ser::{Serialize, Serializer};
 | 
			
		||||
 | 
			
		||||
// Used by generated code and doc tests. Not public API.
 | 
			
		||||
#[doc(hidden)]
 | 
			
		||||
#[path = "private/mod.rs"]
 | 
			
		||||
pub mod __private;
 | 
			
		||||
 | 
			
		||||
#[path = "de/seed.rs"]
 | 
			
		||||
mod seed;
 | 
			
		||||
 | 
			
		||||
#[cfg(not(any(feature = "std", feature = "unstable")))]
 | 
			
		||||
mod std_error;
 | 
			
		||||
 | 
			
		||||
// Re-export #[derive(Serialize, Deserialize)].
 | 
			
		||||
//
 | 
			
		||||
// The reason re-exporting is not enabled by default is that disabling it would
 | 
			
		||||
// be annoying for crates that provide handwritten impls or data formats. They
 | 
			
		||||
// would need to disable default features and then explicitly re-enable std.
 | 
			
		||||
#[cfg(feature = "serde_derive")]
 | 
			
		||||
extern crate serde_derive;
 | 
			
		||||
 | 
			
		||||
/// Derive macro available if serde is built with `features = ["derive"]`.
 | 
			
		||||
#[cfg(feature = "serde_derive")]
 | 
			
		||||
#[cfg_attr(doc_cfg, doc(cfg(feature = "derive")))]
 | 
			
		||||
pub use serde_derive::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
#[cfg(all(not(no_serde_derive), any(feature = "std", feature = "alloc")))]
 | 
			
		||||
mod actually_private {
 | 
			
		||||
    pub struct T;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										231
									
								
								vendor/serde/src/macros.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										231
									
								
								vendor/serde/src/macros.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,231 @@
 | 
			
		||||
// 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.
 | 
			
		||||
//
 | 
			
		||||
/// Helper macro when implementing the `Deserializer` part of a new data format
 | 
			
		||||
/// for Serde.
 | 
			
		||||
///
 | 
			
		||||
/// Some [`Deserializer`] implementations for self-describing formats do not
 | 
			
		||||
/// care what hint the [`Visitor`] gives them, they just want to blindly call
 | 
			
		||||
/// the [`Visitor`] method corresponding to the data they can tell is in the
 | 
			
		||||
/// input. This requires repetitive implementations of all the [`Deserializer`]
 | 
			
		||||
/// trait methods.
 | 
			
		||||
///
 | 
			
		||||
/// ```edition2021
 | 
			
		||||
/// # use serde::forward_to_deserialize_any;
 | 
			
		||||
/// # use serde::de::{value, Deserializer, Visitor};
 | 
			
		||||
/// #
 | 
			
		||||
/// # struct MyDeserializer;
 | 
			
		||||
/// #
 | 
			
		||||
/// # impl<'de> Deserializer<'de> for MyDeserializer {
 | 
			
		||||
/// #     type Error = value::Error;
 | 
			
		||||
/// #
 | 
			
		||||
/// #     fn deserialize_any<V>(self, _: V) -> Result<V::Value, Self::Error>
 | 
			
		||||
/// #     where
 | 
			
		||||
/// #         V: Visitor<'de>,
 | 
			
		||||
/// #     {
 | 
			
		||||
/// #         unimplemented!()
 | 
			
		||||
/// #     }
 | 
			
		||||
/// #
 | 
			
		||||
/// #[inline]
 | 
			
		||||
/// fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error>
 | 
			
		||||
/// where
 | 
			
		||||
///     V: Visitor<'de>,
 | 
			
		||||
/// {
 | 
			
		||||
///     self.deserialize_any(visitor)
 | 
			
		||||
/// }
 | 
			
		||||
/// #
 | 
			
		||||
/// #     forward_to_deserialize_any! {
 | 
			
		||||
/// #         i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
 | 
			
		||||
/// #         bytes byte_buf option unit unit_struct newtype_struct seq tuple
 | 
			
		||||
/// #         tuple_struct map struct enum identifier ignored_any
 | 
			
		||||
/// #     }
 | 
			
		||||
/// # }
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// The `forward_to_deserialize_any!` macro implements these simple forwarding
 | 
			
		||||
/// methods so that they forward directly to [`Deserializer::deserialize_any`].
 | 
			
		||||
/// You can choose which methods to forward.
 | 
			
		||||
///
 | 
			
		||||
/// ```edition2021
 | 
			
		||||
/// # use serde::forward_to_deserialize_any;
 | 
			
		||||
/// # use serde::de::{value, Deserializer, Visitor};
 | 
			
		||||
/// #
 | 
			
		||||
/// # struct MyDeserializer;
 | 
			
		||||
/// #
 | 
			
		||||
/// impl<'de> Deserializer<'de> for MyDeserializer {
 | 
			
		||||
/// #   type Error = value::Error;
 | 
			
		||||
/// #
 | 
			
		||||
///     fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
 | 
			
		||||
///     where
 | 
			
		||||
///         V: Visitor<'de>,
 | 
			
		||||
///     {
 | 
			
		||||
///         /* ... */
 | 
			
		||||
/// #       let _ = visitor;
 | 
			
		||||
/// #       unimplemented!()
 | 
			
		||||
///     }
 | 
			
		||||
///
 | 
			
		||||
///     forward_to_deserialize_any! {
 | 
			
		||||
///         bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
 | 
			
		||||
///         bytes byte_buf option unit unit_struct newtype_struct seq tuple
 | 
			
		||||
///         tuple_struct map struct enum identifier ignored_any
 | 
			
		||||
///     }
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// The macro assumes the convention that your `Deserializer` lifetime parameter
 | 
			
		||||
/// is called `'de` and that the `Visitor` type parameters on each method are
 | 
			
		||||
/// called `V`. A different type parameter and a different lifetime can be
 | 
			
		||||
/// specified explicitly if necessary.
 | 
			
		||||
///
 | 
			
		||||
/// ```edition2021
 | 
			
		||||
/// # use serde::forward_to_deserialize_any;
 | 
			
		||||
/// # use serde::de::{value, Deserializer, Visitor};
 | 
			
		||||
/// # use std::marker::PhantomData;
 | 
			
		||||
/// #
 | 
			
		||||
/// # struct MyDeserializer<V>(PhantomData<V>);
 | 
			
		||||
/// #
 | 
			
		||||
/// # impl<'q, V> Deserializer<'q> for MyDeserializer<V> {
 | 
			
		||||
/// #     type Error = value::Error;
 | 
			
		||||
/// #
 | 
			
		||||
/// #     fn deserialize_any<W>(self, visitor: W) -> Result<W::Value, Self::Error>
 | 
			
		||||
/// #     where
 | 
			
		||||
/// #         W: Visitor<'q>,
 | 
			
		||||
/// #     {
 | 
			
		||||
/// #         unimplemented!()
 | 
			
		||||
/// #     }
 | 
			
		||||
/// #
 | 
			
		||||
/// forward_to_deserialize_any! {
 | 
			
		||||
///     <W: Visitor<'q>>
 | 
			
		||||
///     bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
 | 
			
		||||
///     bytes byte_buf option unit unit_struct newtype_struct seq tuple
 | 
			
		||||
///     tuple_struct map struct enum identifier ignored_any
 | 
			
		||||
/// }
 | 
			
		||||
/// # }
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// [`Deserializer`]: trait.Deserializer.html
 | 
			
		||||
/// [`Visitor`]: de/trait.Visitor.html
 | 
			
		||||
/// [`Deserializer::deserialize_any`]: trait.Deserializer.html#tymethod.deserialize_any
 | 
			
		||||
#[macro_export(local_inner_macros)]
 | 
			
		||||
macro_rules! forward_to_deserialize_any {
 | 
			
		||||
    (<$visitor:ident: Visitor<$lifetime:tt>> $($func:ident)*) => {
 | 
			
		||||
        $(forward_to_deserialize_any_helper!{$func<$lifetime, $visitor>})*
 | 
			
		||||
    };
 | 
			
		||||
    // This case must be after the previous one.
 | 
			
		||||
    ($($func:ident)*) => {
 | 
			
		||||
        $(forward_to_deserialize_any_helper!{$func<'de, V>})*
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[doc(hidden)]
 | 
			
		||||
#[macro_export]
 | 
			
		||||
macro_rules! forward_to_deserialize_any_method {
 | 
			
		||||
    ($func:ident<$l:tt, $v:ident>($($arg:ident : $ty:ty),*)) => {
 | 
			
		||||
        #[inline]
 | 
			
		||||
        fn $func<$v>(self, $($arg: $ty,)* visitor: $v) -> $crate::__private::Result<$v::Value, Self::Error>
 | 
			
		||||
        where
 | 
			
		||||
            $v: $crate::de::Visitor<$l>,
 | 
			
		||||
        {
 | 
			
		||||
            $(
 | 
			
		||||
                let _ = $arg;
 | 
			
		||||
            )*
 | 
			
		||||
            self.deserialize_any(visitor)
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[doc(hidden)]
 | 
			
		||||
#[macro_export(local_inner_macros)]
 | 
			
		||||
macro_rules! forward_to_deserialize_any_helper {
 | 
			
		||||
    (bool<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_bool<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (i8<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_i8<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (i16<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_i16<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (i32<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_i32<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (i64<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_i64<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (i128<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_i128<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (u8<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_u8<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (u16<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_u16<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (u32<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_u32<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (u64<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_u64<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (u128<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_u128<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (f32<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_f32<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (f64<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_f64<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (char<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_char<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (str<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_str<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (string<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_string<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (bytes<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_bytes<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (byte_buf<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_byte_buf<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (option<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_option<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (unit<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_unit<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (unit_struct<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_unit_struct<$l, $v>(name: &'static str)}
 | 
			
		||||
    };
 | 
			
		||||
    (newtype_struct<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_newtype_struct<$l, $v>(name: &'static str)}
 | 
			
		||||
    };
 | 
			
		||||
    (seq<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_seq<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (tuple<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_tuple<$l, $v>(len: usize)}
 | 
			
		||||
    };
 | 
			
		||||
    (tuple_struct<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_tuple_struct<$l, $v>(name: &'static str, len: usize)}
 | 
			
		||||
    };
 | 
			
		||||
    (map<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_map<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (struct<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_struct<$l, $v>(name: &'static str, fields: &'static [&'static str])}
 | 
			
		||||
    };
 | 
			
		||||
    (enum<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_enum<$l, $v>(name: &'static str, variants: &'static [&'static str])}
 | 
			
		||||
    };
 | 
			
		||||
    (identifier<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_identifier<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
    (ignored_any<$l:tt, $v:ident>) => {
 | 
			
		||||
        forward_to_deserialize_any_method!{deserialize_ignored_any<$l, $v>()}
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2892
									
								
								vendor/serde/src/private/de.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2892
									
								
								vendor/serde/src/private/de.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										159
									
								
								vendor/serde/src/private/doc.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								vendor/serde/src/private/doc.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,159 @@
 | 
			
		||||
// Used only by Serde doc tests. Not public API.
 | 
			
		||||
 | 
			
		||||
use crate::lib::*;
 | 
			
		||||
 | 
			
		||||
use crate::ser;
 | 
			
		||||
 | 
			
		||||
#[doc(hidden)]
 | 
			
		||||
#[derive(Debug)]
 | 
			
		||||
pub struct Error;
 | 
			
		||||
 | 
			
		||||
impl ser::Error for Error {
 | 
			
		||||
    fn custom<T>(_: T) -> Self
 | 
			
		||||
    where
 | 
			
		||||
        T: Display,
 | 
			
		||||
    {
 | 
			
		||||
        unimplemented!()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(feature = "std")]
 | 
			
		||||
impl error::Error for Error {
 | 
			
		||||
    fn description(&self) -> &str {
 | 
			
		||||
        unimplemented!()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Display for Error {
 | 
			
		||||
    fn fmt(&self, _: &mut fmt::Formatter) -> fmt::Result {
 | 
			
		||||
        unimplemented!()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[doc(hidden)]
 | 
			
		||||
#[macro_export]
 | 
			
		||||
macro_rules! __private_serialize {
 | 
			
		||||
    () => {
 | 
			
		||||
        trait Serialize {
 | 
			
		||||
            fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
 | 
			
		||||
            where
 | 
			
		||||
                S: $crate::Serializer;
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[doc(hidden)]
 | 
			
		||||
#[macro_export(local_inner_macros)]
 | 
			
		||||
macro_rules! __serialize_unimplemented {
 | 
			
		||||
    ($($func:ident)*) => {
 | 
			
		||||
        $(
 | 
			
		||||
            __serialize_unimplemented_helper!($func);
 | 
			
		||||
        )*
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[doc(hidden)]
 | 
			
		||||
#[macro_export]
 | 
			
		||||
macro_rules! __serialize_unimplemented_method {
 | 
			
		||||
    ($func:ident $(<$t:ident>)* ($($arg:ty),*) -> $ret:ident) => {
 | 
			
		||||
        fn $func $(<$t: ?Sized + $crate::Serialize>)* (self $(, _: $arg)*) -> $crate::__private::Result<Self::$ret, Self::Error> {
 | 
			
		||||
            unimplemented!()
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[doc(hidden)]
 | 
			
		||||
#[macro_export(local_inner_macros)]
 | 
			
		||||
macro_rules! __serialize_unimplemented_helper {
 | 
			
		||||
    (bool) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_bool(bool) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (i8) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_i8(i8) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (i16) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_i16(i16) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (i32) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_i32(i32) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (i64) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_i64(i64) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (u8) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_u8(u8) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (u16) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_u16(u16) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (u32) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_u32(u32) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (u64) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_u64(u64) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (f32) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_f32(f32) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (f64) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_f64(f64) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (char) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_char(char) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (str) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_str(&str) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (bytes) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_bytes(&[u8]) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (none) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_none() -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (some) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_some<T>(&T) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (unit) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_unit() -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (unit_struct) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_unit_struct(&str) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (unit_variant) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_unit_variant(&str, u32, &str) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (newtype_struct) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_newtype_struct<T>(&str, &T) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (newtype_variant) => {
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_newtype_variant<T>(&str, u32, &str, &T) -> Ok);
 | 
			
		||||
    };
 | 
			
		||||
    (seq) => {
 | 
			
		||||
        type SerializeSeq = $crate::ser::Impossible<Self::Ok, Self::Error>;
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_seq(Option<usize>) -> SerializeSeq);
 | 
			
		||||
    };
 | 
			
		||||
    (tuple) => {
 | 
			
		||||
        type SerializeTuple = $crate::ser::Impossible<Self::Ok, Self::Error>;
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_tuple(usize) -> SerializeTuple);
 | 
			
		||||
    };
 | 
			
		||||
    (tuple_struct) => {
 | 
			
		||||
        type SerializeTupleStruct = $crate::ser::Impossible<Self::Ok, Self::Error>;
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_tuple_struct(&str, usize) -> SerializeTupleStruct);
 | 
			
		||||
    };
 | 
			
		||||
    (tuple_variant) => {
 | 
			
		||||
        type SerializeTupleVariant = $crate::ser::Impossible<Self::Ok, Self::Error>;
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_tuple_variant(&str, u32, &str, usize) -> SerializeTupleVariant);
 | 
			
		||||
    };
 | 
			
		||||
    (map) => {
 | 
			
		||||
        type SerializeMap = $crate::ser::Impossible<Self::Ok, Self::Error>;
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_map(Option<usize>) -> SerializeMap);
 | 
			
		||||
    };
 | 
			
		||||
    (struct) => {
 | 
			
		||||
        type SerializeStruct = $crate::ser::Impossible<Self::Ok, Self::Error>;
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_struct(&str, usize) -> SerializeStruct);
 | 
			
		||||
    };
 | 
			
		||||
    (struct_variant) => {
 | 
			
		||||
        type SerializeStructVariant = $crate::ser::Impossible<Self::Ok, Self::Error>;
 | 
			
		||||
        __serialize_unimplemented_method!(serialize_struct_variant(&str, u32, &str, usize) -> SerializeStructVariant);
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										48
									
								
								vendor/serde/src/private/mod.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								vendor/serde/src/private/mod.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
#[cfg(not(no_serde_derive))]
 | 
			
		||||
pub mod de;
 | 
			
		||||
#[cfg(not(no_serde_derive))]
 | 
			
		||||
pub mod ser;
 | 
			
		||||
 | 
			
		||||
// FIXME: #[cfg(doctest)] once https://github.com/rust-lang/rust/issues/67295 is fixed.
 | 
			
		||||
pub mod doc;
 | 
			
		||||
 | 
			
		||||
pub use crate::lib::clone::Clone;
 | 
			
		||||
pub use crate::lib::convert::{From, Into};
 | 
			
		||||
pub use crate::lib::default::Default;
 | 
			
		||||
pub use crate::lib::fmt::{self, Formatter};
 | 
			
		||||
pub use crate::lib::marker::PhantomData;
 | 
			
		||||
pub use crate::lib::option::Option::{self, None, Some};
 | 
			
		||||
pub use crate::lib::ptr;
 | 
			
		||||
pub use crate::lib::result::Result::{self, Err, Ok};
 | 
			
		||||
 | 
			
		||||
pub use self::string::from_utf8_lossy;
 | 
			
		||||
 | 
			
		||||
#[cfg(any(feature = "alloc", feature = "std"))]
 | 
			
		||||
pub use crate::lib::{ToString, Vec};
 | 
			
		||||
 | 
			
		||||
#[cfg(not(no_core_try_from))]
 | 
			
		||||
pub use crate::lib::convert::TryFrom;
 | 
			
		||||
 | 
			
		||||
mod string {
 | 
			
		||||
    use crate::lib::*;
 | 
			
		||||
 | 
			
		||||
    #[cfg(any(feature = "std", feature = "alloc"))]
 | 
			
		||||
    pub fn from_utf8_lossy(bytes: &[u8]) -> Cow<str> {
 | 
			
		||||
        String::from_utf8_lossy(bytes)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // The generated code calls this like:
 | 
			
		||||
    //
 | 
			
		||||
    //     let value = &_serde::__private::from_utf8_lossy(bytes);
 | 
			
		||||
    //     Err(_serde::de::Error::unknown_variant(value, VARIANTS))
 | 
			
		||||
    //
 | 
			
		||||
    // so it is okay for the return type to be different from the std case as long
 | 
			
		||||
    // as the above works.
 | 
			
		||||
    #[cfg(not(any(feature = "std", feature = "alloc")))]
 | 
			
		||||
    pub fn from_utf8_lossy(bytes: &[u8]) -> &str {
 | 
			
		||||
        // Three unicode replacement characters if it fails. They look like a
 | 
			
		||||
        // white-on-black question mark. The user will recognize it as invalid
 | 
			
		||||
        // UTF-8.
 | 
			
		||||
        str::from_utf8(bytes).unwrap_or("\u{fffd}\u{fffd}\u{fffd}")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1385
									
								
								vendor/serde/src/private/ser.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1385
									
								
								vendor/serde/src/private/ser.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										170
									
								
								vendor/serde/src/ser/fmt.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								vendor/serde/src/ser/fmt.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,170 @@
 | 
			
		||||
use crate::lib::*;
 | 
			
		||||
use crate::ser::{Error, Impossible, Serialize, Serializer};
 | 
			
		||||
 | 
			
		||||
impl Error for fmt::Error {
 | 
			
		||||
    fn custom<T: Display>(_msg: T) -> Self {
 | 
			
		||||
        fmt::Error
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
macro_rules! fmt_primitives {
 | 
			
		||||
    ($($f:ident: $t:ty,)*) => {
 | 
			
		||||
        $(
 | 
			
		||||
            fn $f(self, v: $t) -> fmt::Result {
 | 
			
		||||
                Display::fmt(&v, self)
 | 
			
		||||
            }
 | 
			
		||||
        )*
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// ```edition2021
 | 
			
		||||
/// use serde::ser::Serialize;
 | 
			
		||||
/// use serde_derive::Serialize;
 | 
			
		||||
/// use std::fmt::{self, Display};
 | 
			
		||||
///
 | 
			
		||||
/// #[derive(Serialize)]
 | 
			
		||||
/// #[serde(rename_all = "kebab-case")]
 | 
			
		||||
/// pub enum MessageType {
 | 
			
		||||
///     StartRequest,
 | 
			
		||||
///     EndRequest,
 | 
			
		||||
/// }
 | 
			
		||||
///
 | 
			
		||||
/// impl Display for MessageType {
 | 
			
		||||
///     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
 | 
			
		||||
///         self.serialize(f)
 | 
			
		||||
///     }
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
impl<'a, 'b> Serializer for &'a mut fmt::Formatter<'b> {
 | 
			
		||||
    type Ok = ();
 | 
			
		||||
    type Error = fmt::Error;
 | 
			
		||||
    type SerializeSeq = Impossible<(), fmt::Error>;
 | 
			
		||||
    type SerializeTuple = Impossible<(), fmt::Error>;
 | 
			
		||||
    type SerializeTupleStruct = Impossible<(), fmt::Error>;
 | 
			
		||||
    type SerializeTupleVariant = Impossible<(), fmt::Error>;
 | 
			
		||||
    type SerializeMap = Impossible<(), fmt::Error>;
 | 
			
		||||
    type SerializeStruct = Impossible<(), fmt::Error>;
 | 
			
		||||
    type SerializeStructVariant = Impossible<(), fmt::Error>;
 | 
			
		||||
 | 
			
		||||
    fmt_primitives! {
 | 
			
		||||
        serialize_bool: bool,
 | 
			
		||||
        serialize_i8: i8,
 | 
			
		||||
        serialize_i16: i16,
 | 
			
		||||
        serialize_i32: i32,
 | 
			
		||||
        serialize_i64: i64,
 | 
			
		||||
        serialize_i128: i128,
 | 
			
		||||
        serialize_u8: u8,
 | 
			
		||||
        serialize_u16: u16,
 | 
			
		||||
        serialize_u32: u32,
 | 
			
		||||
        serialize_u64: u64,
 | 
			
		||||
        serialize_u128: u128,
 | 
			
		||||
        serialize_f32: f32,
 | 
			
		||||
        serialize_f64: f64,
 | 
			
		||||
        serialize_char: char,
 | 
			
		||||
        serialize_str: &str,
 | 
			
		||||
        serialize_unit_struct: &'static str,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_unit_variant(
 | 
			
		||||
        self,
 | 
			
		||||
        _name: &'static str,
 | 
			
		||||
        _variant_index: u32,
 | 
			
		||||
        variant: &'static str,
 | 
			
		||||
    ) -> fmt::Result {
 | 
			
		||||
        Display::fmt(variant, self)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_newtype_struct<T: ?Sized>(self, _name: &'static str, value: &T) -> fmt::Result
 | 
			
		||||
    where
 | 
			
		||||
        T: Serialize,
 | 
			
		||||
    {
 | 
			
		||||
        Serialize::serialize(value, self)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_bytes(self, _v: &[u8]) -> fmt::Result {
 | 
			
		||||
        Err(fmt::Error)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_none(self) -> fmt::Result {
 | 
			
		||||
        Err(fmt::Error)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_some<T: ?Sized>(self, _value: &T) -> fmt::Result
 | 
			
		||||
    where
 | 
			
		||||
        T: Serialize,
 | 
			
		||||
    {
 | 
			
		||||
        Err(fmt::Error)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_unit(self) -> fmt::Result {
 | 
			
		||||
        Err(fmt::Error)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_newtype_variant<T: ?Sized>(
 | 
			
		||||
        self,
 | 
			
		||||
        _name: &'static str,
 | 
			
		||||
        _variant_index: u32,
 | 
			
		||||
        _variant: &'static str,
 | 
			
		||||
        _value: &T,
 | 
			
		||||
    ) -> fmt::Result
 | 
			
		||||
    where
 | 
			
		||||
        T: Serialize,
 | 
			
		||||
    {
 | 
			
		||||
        Err(fmt::Error)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq, fmt::Error> {
 | 
			
		||||
        Err(fmt::Error)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple, fmt::Error> {
 | 
			
		||||
        Err(fmt::Error)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_tuple_struct(
 | 
			
		||||
        self,
 | 
			
		||||
        _name: &'static str,
 | 
			
		||||
        _len: usize,
 | 
			
		||||
    ) -> Result<Self::SerializeTupleStruct, fmt::Error> {
 | 
			
		||||
        Err(fmt::Error)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_tuple_variant(
 | 
			
		||||
        self,
 | 
			
		||||
        _name: &'static str,
 | 
			
		||||
        _variant_index: u32,
 | 
			
		||||
        _variant: &'static str,
 | 
			
		||||
        _len: usize,
 | 
			
		||||
    ) -> Result<Self::SerializeTupleVariant, fmt::Error> {
 | 
			
		||||
        Err(fmt::Error)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, fmt::Error> {
 | 
			
		||||
        Err(fmt::Error)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_struct(
 | 
			
		||||
        self,
 | 
			
		||||
        _name: &'static str,
 | 
			
		||||
        _len: usize,
 | 
			
		||||
    ) -> Result<Self::SerializeStruct, fmt::Error> {
 | 
			
		||||
        Err(fmt::Error)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_struct_variant(
 | 
			
		||||
        self,
 | 
			
		||||
        _name: &'static str,
 | 
			
		||||
        _variant_index: u32,
 | 
			
		||||
        _variant: &'static str,
 | 
			
		||||
        _len: usize,
 | 
			
		||||
    ) -> Result<Self::SerializeStructVariant, fmt::Error> {
 | 
			
		||||
        Err(fmt::Error)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn collect_str<T: ?Sized>(self, value: &T) -> fmt::Result
 | 
			
		||||
    where
 | 
			
		||||
        T: Display,
 | 
			
		||||
    {
 | 
			
		||||
        Display::fmt(value, self)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1077
									
								
								vendor/serde/src/ser/impls.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1077
									
								
								vendor/serde/src/ser/impls.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										216
									
								
								vendor/serde/src/ser/impossible.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										216
									
								
								vendor/serde/src/ser/impossible.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,216 @@
 | 
			
		||||
//! This module contains `Impossible` serializer and its implementations.
 | 
			
		||||
 | 
			
		||||
use crate::lib::*;
 | 
			
		||||
 | 
			
		||||
use crate::ser::{
 | 
			
		||||
    self, Serialize, SerializeMap, SerializeSeq, SerializeStruct, SerializeStructVariant,
 | 
			
		||||
    SerializeTuple, SerializeTupleStruct, SerializeTupleVariant,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Helper type for implementing a `Serializer` that does not support
 | 
			
		||||
/// serializing one of the compound types.
 | 
			
		||||
///
 | 
			
		||||
/// This type cannot be instantiated, but implements every one of the traits
 | 
			
		||||
/// corresponding to the [`Serializer`] compound types: [`SerializeSeq`],
 | 
			
		||||
/// [`SerializeTuple`], [`SerializeTupleStruct`], [`SerializeTupleVariant`],
 | 
			
		||||
/// [`SerializeMap`], [`SerializeStruct`], and [`SerializeStructVariant`].
 | 
			
		||||
///
 | 
			
		||||
/// ```edition2021
 | 
			
		||||
/// # use serde::ser::{Serializer, Impossible};
 | 
			
		||||
/// # use serde::__private::doc::Error;
 | 
			
		||||
/// #
 | 
			
		||||
/// # struct MySerializer;
 | 
			
		||||
/// #
 | 
			
		||||
/// impl Serializer for MySerializer {
 | 
			
		||||
///     type Ok = ();
 | 
			
		||||
///     type Error = Error;
 | 
			
		||||
///
 | 
			
		||||
///     type SerializeSeq = Impossible<(), Error>;
 | 
			
		||||
///     /* other associated types */
 | 
			
		||||
///
 | 
			
		||||
///     /// This data format does not support serializing sequences.
 | 
			
		||||
///     fn serialize_seq(self,
 | 
			
		||||
///                      len: Option<usize>)
 | 
			
		||||
///                      -> Result<Self::SerializeSeq, Error> {
 | 
			
		||||
///         // Given Impossible cannot be instantiated, the only
 | 
			
		||||
///         // thing we can do here is to return an error.
 | 
			
		||||
/// #         stringify! {
 | 
			
		||||
///         Err(...)
 | 
			
		||||
/// #         };
 | 
			
		||||
/// #         unimplemented!()
 | 
			
		||||
///     }
 | 
			
		||||
///
 | 
			
		||||
///     /* other Serializer methods */
 | 
			
		||||
/// #     serde::__serialize_unimplemented! {
 | 
			
		||||
/// #         bool i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str bytes none some
 | 
			
		||||
/// #         unit unit_struct unit_variant newtype_struct newtype_variant
 | 
			
		||||
/// #         tuple tuple_struct tuple_variant map struct struct_variant
 | 
			
		||||
/// #     }
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// [`Serializer`]: trait.Serializer.html
 | 
			
		||||
/// [`SerializeSeq`]: trait.SerializeSeq.html
 | 
			
		||||
/// [`SerializeTuple`]: trait.SerializeTuple.html
 | 
			
		||||
/// [`SerializeTupleStruct`]: trait.SerializeTupleStruct.html
 | 
			
		||||
/// [`SerializeTupleVariant`]: trait.SerializeTupleVariant.html
 | 
			
		||||
/// [`SerializeMap`]: trait.SerializeMap.html
 | 
			
		||||
/// [`SerializeStruct`]: trait.SerializeStruct.html
 | 
			
		||||
/// [`SerializeStructVariant`]: trait.SerializeStructVariant.html
 | 
			
		||||
pub struct Impossible<Ok, Error> {
 | 
			
		||||
    void: Void,
 | 
			
		||||
    ok: PhantomData<Ok>,
 | 
			
		||||
    error: PhantomData<Error>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
enum Void {}
 | 
			
		||||
 | 
			
		||||
impl<Ok, Error> SerializeSeq for Impossible<Ok, Error>
 | 
			
		||||
where
 | 
			
		||||
    Error: ser::Error,
 | 
			
		||||
{
 | 
			
		||||
    type Ok = Ok;
 | 
			
		||||
    type Error = Error;
 | 
			
		||||
 | 
			
		||||
    fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Error>
 | 
			
		||||
    where
 | 
			
		||||
        T: Serialize,
 | 
			
		||||
    {
 | 
			
		||||
        let _ = value;
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn end(self) -> Result<Ok, Error> {
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<Ok, Error> SerializeTuple for Impossible<Ok, Error>
 | 
			
		||||
where
 | 
			
		||||
    Error: ser::Error,
 | 
			
		||||
{
 | 
			
		||||
    type Ok = Ok;
 | 
			
		||||
    type Error = Error;
 | 
			
		||||
 | 
			
		||||
    fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), Error>
 | 
			
		||||
    where
 | 
			
		||||
        T: Serialize,
 | 
			
		||||
    {
 | 
			
		||||
        let _ = value;
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn end(self) -> Result<Ok, Error> {
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<Ok, Error> SerializeTupleStruct for Impossible<Ok, Error>
 | 
			
		||||
where
 | 
			
		||||
    Error: ser::Error,
 | 
			
		||||
{
 | 
			
		||||
    type Ok = Ok;
 | 
			
		||||
    type Error = Error;
 | 
			
		||||
 | 
			
		||||
    fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Error>
 | 
			
		||||
    where
 | 
			
		||||
        T: Serialize,
 | 
			
		||||
    {
 | 
			
		||||
        let _ = value;
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn end(self) -> Result<Ok, Error> {
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<Ok, Error> SerializeTupleVariant for Impossible<Ok, Error>
 | 
			
		||||
where
 | 
			
		||||
    Error: ser::Error,
 | 
			
		||||
{
 | 
			
		||||
    type Ok = Ok;
 | 
			
		||||
    type Error = Error;
 | 
			
		||||
 | 
			
		||||
    fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Error>
 | 
			
		||||
    where
 | 
			
		||||
        T: Serialize,
 | 
			
		||||
    {
 | 
			
		||||
        let _ = value;
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn end(self) -> Result<Ok, Error> {
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<Ok, Error> SerializeMap for Impossible<Ok, Error>
 | 
			
		||||
where
 | 
			
		||||
    Error: ser::Error,
 | 
			
		||||
{
 | 
			
		||||
    type Ok = Ok;
 | 
			
		||||
    type Error = Error;
 | 
			
		||||
 | 
			
		||||
    fn serialize_key<T: ?Sized>(&mut self, key: &T) -> Result<(), Error>
 | 
			
		||||
    where
 | 
			
		||||
        T: Serialize,
 | 
			
		||||
    {
 | 
			
		||||
        let _ = key;
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn serialize_value<T: ?Sized>(&mut self, value: &T) -> Result<(), Error>
 | 
			
		||||
    where
 | 
			
		||||
        T: Serialize,
 | 
			
		||||
    {
 | 
			
		||||
        let _ = value;
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn end(self) -> Result<Ok, Error> {
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<Ok, Error> SerializeStruct for Impossible<Ok, Error>
 | 
			
		||||
where
 | 
			
		||||
    Error: ser::Error,
 | 
			
		||||
{
 | 
			
		||||
    type Ok = Ok;
 | 
			
		||||
    type Error = Error;
 | 
			
		||||
 | 
			
		||||
    fn serialize_field<T: ?Sized>(&mut self, key: &'static str, value: &T) -> Result<(), Error>
 | 
			
		||||
    where
 | 
			
		||||
        T: Serialize,
 | 
			
		||||
    {
 | 
			
		||||
        let _ = key;
 | 
			
		||||
        let _ = value;
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn end(self) -> Result<Ok, Error> {
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<Ok, Error> SerializeStructVariant for Impossible<Ok, Error>
 | 
			
		||||
where
 | 
			
		||||
    Error: ser::Error,
 | 
			
		||||
{
 | 
			
		||||
    type Ok = Ok;
 | 
			
		||||
    type Error = Error;
 | 
			
		||||
 | 
			
		||||
    fn serialize_field<T: ?Sized>(&mut self, key: &'static str, value: &T) -> Result<(), Error>
 | 
			
		||||
    where
 | 
			
		||||
        T: Serialize,
 | 
			
		||||
    {
 | 
			
		||||
        let _ = key;
 | 
			
		||||
        let _ = value;
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn end(self) -> Result<Ok, Error> {
 | 
			
		||||
        match self.void {}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1952
									
								
								vendor/serde/src/ser/mod.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1952
									
								
								vendor/serde/src/ser/mod.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										48
									
								
								vendor/serde/src/std_error.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								vendor/serde/src/std_error.rs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
use crate::lib::{Debug, Display};
 | 
			
		||||
 | 
			
		||||
/// Either a re-export of std::error::Error or a new identical trait, depending
 | 
			
		||||
/// on whether Serde's "std" feature is enabled.
 | 
			
		||||
///
 | 
			
		||||
/// Serde's error traits [`serde::ser::Error`] and [`serde::de::Error`] require
 | 
			
		||||
/// [`std::error::Error`] as a supertrait, but only when Serde is built with
 | 
			
		||||
/// "std" enabled. Data formats that don't care about no\_std support should
 | 
			
		||||
/// generally provide their error types with a `std::error::Error` impl
 | 
			
		||||
/// directly:
 | 
			
		||||
///
 | 
			
		||||
/// ```edition2021
 | 
			
		||||
/// #[derive(Debug)]
 | 
			
		||||
/// struct MySerError {...}
 | 
			
		||||
///
 | 
			
		||||
/// impl serde::ser::Error for MySerError {...}
 | 
			
		||||
///
 | 
			
		||||
/// impl std::fmt::Display for MySerError {...}
 | 
			
		||||
///
 | 
			
		||||
/// // We don't support no_std!
 | 
			
		||||
/// impl std::error::Error for MySerError {}
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// Data formats that *do* support no\_std may either have a "std" feature of
 | 
			
		||||
/// their own:
 | 
			
		||||
///
 | 
			
		||||
/// ```toml
 | 
			
		||||
/// [features]
 | 
			
		||||
/// std = ["serde/std"]
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// ```edition2021
 | 
			
		||||
/// #[cfg(feature = "std")]
 | 
			
		||||
/// impl std::error::Error for MySerError {}
 | 
			
		||||
/// ```
 | 
			
		||||
///
 | 
			
		||||
/// ... or else provide the std Error impl unconditionally via Serde's
 | 
			
		||||
/// re-export:
 | 
			
		||||
///
 | 
			
		||||
/// ```edition2021
 | 
			
		||||
/// impl serde::ser::StdError for MySerError {}
 | 
			
		||||
/// ```
 | 
			
		||||
pub trait Error: Debug + Display {
 | 
			
		||||
    /// The underlying cause of this error, if any.
 | 
			
		||||
    fn source(&self) -> Option<&(Error + 'static)> {
 | 
			
		||||
        None
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user