diff options
author | Valentin Popov <valentin@popov.link> | 2024-07-19 15:37:58 +0300 |
---|---|---|
committer | Valentin Popov <valentin@popov.link> | 2024-07-19 15:37:58 +0300 |
commit | a990de90fe41456a23e58bd087d2f107d321f3a1 (patch) | |
tree | 15afc392522a9e85dc3332235e311b7d39352ea9 /vendor/serde/src/private/ser.rs | |
parent | 3d48cd3f81164bbfc1a755dc1d4a9a02f98c8ddd (diff) | |
download | fparkan-a990de90fe41456a23e58bd087d2f107d321f3a1.tar.xz fparkan-a990de90fe41456a23e58bd087d2f107d321f3a1.zip |
Deleted vendor folder
Diffstat (limited to 'vendor/serde/src/private/ser.rs')
-rw-r--r-- | vendor/serde/src/private/ser.rs | 1385 |
1 files changed, 0 insertions, 1385 deletions
diff --git a/vendor/serde/src/private/ser.rs b/vendor/serde/src/private/ser.rs deleted file mode 100644 index 50bcb25..0000000 --- a/vendor/serde/src/private/ser.rs +++ /dev/null @@ -1,1385 +0,0 @@ -use crate::lib::*; - -use crate::ser::{self, Impossible, Serialize, SerializeMap, SerializeStruct, Serializer}; - -#[cfg(any(feature = "std", feature = "alloc"))] -use self::content::{ - Content, ContentSerializer, SerializeStructVariantAsMapValue, SerializeTupleVariantAsMapValue, -}; - -/// Used to check that serde(getter) attributes return the expected type. -/// Not public API. -pub fn constrain<T: ?Sized>(t: &T) -> &T { - t -} - -/// Not public API. -pub fn serialize_tagged_newtype<S, T>( - serializer: S, - type_ident: &'static str, - variant_ident: &'static str, - tag: &'static str, - variant_name: &'static str, - value: &T, -) -> Result<S::Ok, S::Error> -where - S: Serializer, - T: Serialize, -{ - value.serialize(TaggedSerializer { - type_ident, - variant_ident, - tag, - variant_name, - delegate: serializer, - }) -} - -struct TaggedSerializer<S> { - type_ident: &'static str, - variant_ident: &'static str, - tag: &'static str, - variant_name: &'static str, - delegate: S, -} - -enum Unsupported { - Boolean, - Integer, - Float, - Char, - String, - ByteArray, - Optional, - #[cfg(any(feature = "std", feature = "alloc"))] - UnitStruct, - Sequence, - Tuple, - TupleStruct, - Enum, -} - -impl Display for Unsupported { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - match *self { - Unsupported::Boolean => formatter.write_str("a boolean"), - Unsupported::Integer => formatter.write_str("an integer"), - Unsupported::Float => formatter.write_str("a float"), - Unsupported::Char => formatter.write_str("a char"), - Unsupported::String => formatter.write_str("a string"), - Unsupported::ByteArray => formatter.write_str("a byte array"), - Unsupported::Optional => formatter.write_str("an optional"), - #[cfg(any(feature = "std", feature = "alloc"))] - Unsupported::UnitStruct => formatter.write_str("unit struct"), - Unsupported::Sequence => formatter.write_str("a sequence"), - Unsupported::Tuple => formatter.write_str("a tuple"), - Unsupported::TupleStruct => formatter.write_str("a tuple struct"), - Unsupported::Enum => formatter.write_str("an enum"), - } - } -} - -impl<S> TaggedSerializer<S> -where - S: Serializer, -{ - fn bad_type(self, what: Unsupported) -> S::Error { - ser::Error::custom(format_args!( - "cannot serialize tagged newtype variant {}::{} containing {}", - self.type_ident, self.variant_ident, what - )) - } -} - -impl<S> Serializer for TaggedSerializer<S> -where - S: Serializer, -{ - type Ok = S::Ok; - type Error = S::Error; - - type SerializeSeq = Impossible<S::Ok, S::Error>; - type SerializeTuple = Impossible<S::Ok, S::Error>; - type SerializeTupleStruct = Impossible<S::Ok, S::Error>; - type SerializeMap = S::SerializeMap; - type SerializeStruct = S::SerializeStruct; - - #[cfg(not(any(feature = "std", feature = "alloc")))] - type SerializeTupleVariant = Impossible<S::Ok, S::Error>; - #[cfg(any(feature = "std", feature = "alloc"))] - type SerializeTupleVariant = SerializeTupleVariantAsMapValue<S::SerializeMap>; - - #[cfg(not(any(feature = "std", feature = "alloc")))] - type SerializeStructVariant = Impossible<S::Ok, S::Error>; - #[cfg(any(feature = "std", feature = "alloc"))] - type SerializeStructVariant = SerializeStructVariantAsMapValue<S::SerializeMap>; - - fn serialize_bool(self, _: bool) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Boolean)) - } - - fn serialize_i8(self, _: i8) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Integer)) - } - - fn serialize_i16(self, _: i16) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Integer)) - } - - fn serialize_i32(self, _: i32) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Integer)) - } - - fn serialize_i64(self, _: i64) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Integer)) - } - - fn serialize_u8(self, _: u8) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Integer)) - } - - fn serialize_u16(self, _: u16) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Integer)) - } - - fn serialize_u32(self, _: u32) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Integer)) - } - - fn serialize_u64(self, _: u64) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Integer)) - } - - fn serialize_f32(self, _: f32) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Float)) - } - - fn serialize_f64(self, _: f64) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Float)) - } - - fn serialize_char(self, _: char) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Char)) - } - - fn serialize_str(self, _: &str) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::String)) - } - - fn serialize_bytes(self, _: &[u8]) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::ByteArray)) - } - - fn serialize_none(self) -> Result<Self::Ok, Self::Error> { - Err(self.bad_type(Unsupported::Optional)) - } - - fn serialize_some<T: ?Sized>(self, _: &T) -> Result<Self::Ok, Self::Error> - where - T: Serialize, - { - Err(self.bad_type(Unsupported::Optional)) - } - - fn serialize_unit(self) -> Result<Self::Ok, Self::Error> { - let mut map = tri!(self.delegate.serialize_map(Some(1))); - tri!(map.serialize_entry(self.tag, self.variant_name)); - map.end() - } - - fn serialize_unit_struct(self, _: &'static str) -> Result<Self::Ok, Self::Error> { - let mut map = tri!(self.delegate.serialize_map(Some(1))); - tri!(map.serialize_entry(self.tag, self.variant_name)); - map.end() - } - - fn serialize_unit_variant( - self, - _: &'static str, - _: u32, - inner_variant: &'static str, - ) -> Result<Self::Ok, Self::Error> { - let mut map = tri!(self.delegate.serialize_map(Some(2))); - tri!(map.serialize_entry(self.tag, self.variant_name)); - tri!(map.serialize_entry(inner_variant, &())); - map.end() - } - - fn serialize_newtype_struct<T: ?Sized>( - self, - _: &'static str, - value: &T, - ) -> Result<Self::Ok, Self::Error> - where - T: Serialize, - { - value.serialize(self) - } - - fn serialize_newtype_variant<T: ?Sized>( - self, - _: &'static str, - _: u32, - inner_variant: &'static str, - inner_value: &T, - ) -> Result<Self::Ok, Self::Error> - where - T: Serialize, - { - let mut map = tri!(self.delegate.serialize_map(Some(2))); - tri!(map.serialize_entry(self.tag, self.variant_name)); - tri!(map.serialize_entry(inner_variant, inner_value)); - map.end() - } - - fn serialize_seq(self, _: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> { - Err(self.bad_type(Unsupported::Sequence)) - } - - fn serialize_tuple(self, _: usize) -> Result<Self::SerializeTuple, Self::Error> { - Err(self.bad_type(Unsupported::Tuple)) - } - - fn serialize_tuple_struct( - self, - _: &'static str, - _: usize, - ) -> Result<Self::SerializeTupleStruct, Self::Error> { - Err(self.bad_type(Unsupported::TupleStruct)) - } - - #[cfg(not(any(feature = "std", feature = "alloc")))] - fn serialize_tuple_variant( - self, - _: &'static str, - _: u32, - _: &'static str, - _: usize, - ) -> Result<Self::SerializeTupleVariant, Self::Error> { - // Lack of push-based serialization means we need to buffer the content - // of the tuple variant, so it requires std. - Err(self.bad_type(Unsupported::Enum)) - } - - #[cfg(any(feature = "std", feature = "alloc"))] - fn serialize_tuple_variant( - self, - _: &'static str, - _: u32, - inner_variant: &'static str, - len: usize, - ) -> Result<Self::SerializeTupleVariant, Self::Error> { - let mut map = tri!(self.delegate.serialize_map(Some(2))); - tri!(map.serialize_entry(self.tag, self.variant_name)); - tri!(map.serialize_key(inner_variant)); - Ok(SerializeTupleVariantAsMapValue::new( - map, - inner_variant, - len, - )) - } - - fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> { - let mut map = tri!(self.delegate.serialize_map(len.map(|len| len + 1))); - tri!(map.serialize_entry(self.tag, self.variant_name)); - Ok(map) - } - - fn serialize_struct( - self, - name: &'static str, - len: usize, - ) -> Result<Self::SerializeStruct, Self::Error> { - let mut state = tri!(self.delegate.serialize_struct(name, len + 1)); - tri!(state.serialize_field(self.tag, self.variant_name)); - Ok(state) - } - - #[cfg(not(any(feature = "std", feature = "alloc")))] - fn serialize_struct_variant( - self, - _: &'static str, - _: u32, - _: &'static str, - _: usize, - ) -> Result<Self::SerializeStructVariant, Self::Error> { - // Lack of push-based serialization means we need to buffer the content - // of the struct variant, so it requires std. - Err(self.bad_type(Unsupported::Enum)) - } - - #[cfg(any(feature = "std", feature = "alloc"))] - fn serialize_struct_variant( - self, - _: &'static str, - _: u32, - inner_variant: &'static str, - len: usize, - ) -> Result<Self::SerializeStructVariant, Self::Error> { - let mut map = tri!(self.delegate.serialize_map(Some(2))); - tri!(map.serialize_entry(self.tag, self.variant_name)); - tri!(map.serialize_key(inner_variant)); - Ok(SerializeStructVariantAsMapValue::new( - map, - inner_variant, - len, - )) - } - - #[cfg(not(any(feature = "std", feature = "alloc")))] - fn collect_str<T: ?Sized>(self, _: &T) -> Result<Self::Ok, Self::Error> - where - T: Display, - { - Err(self.bad_type(Unsupported::String)) - } -} - -#[cfg(any(feature = "std", feature = "alloc"))] -mod content { - use crate::lib::*; - - use crate::ser::{self, Serialize, Serializer}; - - pub struct SerializeTupleVariantAsMapValue<M> { - map: M, - name: &'static str, - fields: Vec<Content>, - } - - impl<M> SerializeTupleVariantAsMapValue<M> { - pub fn new(map: M, name: &'static str, len: usize) -> Self { - SerializeTupleVariantAsMapValue { - map, - name, - fields: Vec::with_capacity(len), - } - } - } - - impl<M> ser::SerializeTupleVariant for SerializeTupleVariantAsMapValue<M> - where - M: ser::SerializeMap, - { - type Ok = M::Ok; - type Error = M::Error; - - fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), M::Error> - where - T: Serialize, - { - let value = tri!(value.serialize(ContentSerializer::<M::Error>::new())); - self.fields.push(value); - Ok(()) - } - - fn end(mut self) -> Result<M::Ok, M::Error> { - tri!(self - .map - .serialize_value(&Content::TupleStruct(self.name, self.fields))); - self.map.end() - } - } - - pub struct SerializeStructVariantAsMapValue<M> { - map: M, - name: &'static str, - fields: Vec<(&'static str, Content)>, - } - - impl<M> SerializeStructVariantAsMapValue<M> { - pub fn new(map: M, name: &'static str, len: usize) -> Self { - SerializeStructVariantAsMapValue { - map, - name, - fields: Vec::with_capacity(len), - } - } - } - - impl<M> ser::SerializeStructVariant for SerializeStructVariantAsMapValue<M> - where - M: ser::SerializeMap, - { - type Ok = M::Ok; - type Error = M::Error; - - fn serialize_field<T: ?Sized>( - &mut self, - key: &'static str, - value: &T, - ) -> Result<(), M::Error> - where - T: Serialize, - { - let value = tri!(value.serialize(ContentSerializer::<M::Error>::new())); - self.fields.push((key, value)); - Ok(()) - } - - fn end(mut self) -> Result<M::Ok, M::Error> { - tri!(self - .map - .serialize_value(&Content::Struct(self.name, self.fields))); - self.map.end() - } - } - - pub enum Content { - Bool(bool), - - U8(u8), - U16(u16), - U32(u32), - U64(u64), - - I8(i8), - I16(i16), - I32(i32), - I64(i64), - - F32(f32), - F64(f64), - - Char(char), - String(String), - Bytes(Vec<u8>), - - None, - Some(Box<Content>), - - Unit, - UnitStruct(&'static str), - UnitVariant(&'static str, u32, &'static str), - NewtypeStruct(&'static str, Box<Content>), - NewtypeVariant(&'static str, u32, &'static str, Box<Content>), - - Seq(Vec<Content>), - Tuple(Vec<Content>), - TupleStruct(&'static str, Vec<Content>), - TupleVariant(&'static str, u32, &'static str, Vec<Content>), - Map(Vec<(Content, Content)>), - Struct(&'static str, Vec<(&'static str, Content)>), - StructVariant( - &'static str, - u32, - &'static str, - Vec<(&'static str, Content)>, - ), - } - - impl Serialize for Content { - fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> - where - S: Serializer, - { - match *self { - Content::Bool(b) => serializer.serialize_bool(b), - Content::U8(u) => serializer.serialize_u8(u), - Content::U16(u) => serializer.serialize_u16(u), - Content::U32(u) => serializer.serialize_u32(u), - Content::U64(u) => serializer.serialize_u64(u), - Content::I8(i) => serializer.serialize_i8(i), - Content::I16(i) => serializer.serialize_i16(i), - Content::I32(i) => serializer.serialize_i32(i), - Content::I64(i) => serializer.serialize_i64(i), - Content::F32(f) => serializer.serialize_f32(f), - Content::F64(f) => serializer.serialize_f64(f), - Content::Char(c) => serializer.serialize_char(c), - Content::String(ref s) => serializer.serialize_str(s), - Content::Bytes(ref b) => serializer.serialize_bytes(b), - Content::None => serializer.serialize_none(), - Content::Some(ref c) => serializer.serialize_some(&**c), - Content::Unit => serializer.serialize_unit(), - Content::UnitStruct(n) => serializer.serialize_unit_struct(n), - Content::UnitVariant(n, i, v) => serializer.serialize_unit_variant(n, i, v), - Content::NewtypeStruct(n, ref c) => serializer.serialize_newtype_struct(n, &**c), - Content::NewtypeVariant(n, i, v, ref c) => { - serializer.serialize_newtype_variant(n, i, v, &**c) - } - Content::Seq(ref elements) => elements.serialize(serializer), - Content::Tuple(ref elements) => { - use crate::ser::SerializeTuple; - let mut tuple = tri!(serializer.serialize_tuple(elements.len())); - for e in elements { - tri!(tuple.serialize_element(e)); - } - tuple.end() - } - Content::TupleStruct(n, ref fields) => { - use crate::ser::SerializeTupleStruct; - let mut ts = tri!(serializer.serialize_tuple_struct(n, fields.len())); - for f in fields { - tri!(ts.serialize_field(f)); - } - ts.end() - } - Content::TupleVariant(n, i, v, ref fields) => { - use crate::ser::SerializeTupleVariant; - let mut tv = tri!(serializer.serialize_tuple_variant(n, i, v, fields.len())); - for f in fields { - tri!(tv.serialize_field(f)); - } - tv.end() - } - Content::Map(ref entries) => { - use crate::ser::SerializeMap; - let mut map = tri!(serializer.serialize_map(Some(entries.len()))); - for (k, v) in entries { - tri!(map.serialize_entry(k, v)); - } - map.end() - } - Content::Struct(n, ref fields) => { - use crate::ser::SerializeStruct; - let mut s = tri!(serializer.serialize_struct(n, fields.len())); - for &(k, ref v) in fields { - tri!(s.serialize_field(k, v)); - } - s.end() - } - Content::StructVariant(n, i, v, ref fields) => { - use crate::ser::SerializeStructVariant; - let mut sv = tri!(serializer.serialize_struct_variant(n, i, v, fields.len())); - for &(k, ref v) in fields { - tri!(sv.serialize_field(k, v)); - } - sv.end() - } - } - } - } - - pub struct ContentSerializer<E> { - error: PhantomData<E>, - } - - impl<E> ContentSerializer<E> { - pub fn new() -> Self { - ContentSerializer { error: PhantomData } - } - } - - impl<E> Serializer for ContentSerializer<E> - where - E: ser::Error, - { - type Ok = Content; - type Error = E; - - type SerializeSeq = SerializeSeq<E>; - type SerializeTuple = SerializeTuple<E>; - type SerializeTupleStruct = SerializeTupleStruct<E>; - type SerializeTupleVariant = SerializeTupleVariant<E>; - type SerializeMap = SerializeMap<E>; - type SerializeStruct = SerializeStruct<E>; - type SerializeStructVariant = SerializeStructVariant<E>; - - fn serialize_bool(self, v: bool) -> Result<Content, E> { - Ok(Content::Bool(v)) - } - - fn serialize_i8(self, v: i8) -> Result<Content, E> { - Ok(Content::I8(v)) - } - - fn serialize_i16(self, v: i16) -> Result<Content, E> { - Ok(Content::I16(v)) - } - - fn serialize_i32(self, v: i32) -> Result<Content, E> { - Ok(Content::I32(v)) - } - - fn serialize_i64(self, v: i64) -> Result<Content, E> { - Ok(Content::I64(v)) - } - - fn serialize_u8(self, v: u8) -> Result<Content, E> { - Ok(Content::U8(v)) - } - - fn serialize_u16(self, v: u16) -> Result<Content, E> { - Ok(Content::U16(v)) - } - - fn serialize_u32(self, v: u32) -> Result<Content, E> { - Ok(Content::U32(v)) - } - - fn serialize_u64(self, v: u64) -> Result<Content, E> { - Ok(Content::U64(v)) - } - - fn serialize_f32(self, v: f32) -> Result<Content, E> { - Ok(Content::F32(v)) - } - - fn serialize_f64(self, v: f64) -> Result<Content, E> { - Ok(Content::F64(v)) - } - - fn serialize_char(self, v: char) -> Result<Content, E> { - Ok(Content::Char(v)) - } - - fn serialize_str(self, value: &str) -> Result<Content, E> { - Ok(Content::String(value.to_owned())) - } - - fn serialize_bytes(self, value: &[u8]) -> Result<Content, E> { - Ok(Content::Bytes(value.to_owned())) - } - - fn serialize_none(self) -> Result<Content, E> { - Ok(Content::None) - } - - fn serialize_some<T: ?Sized>(self, value: &T) -> Result<Content, E> - where - T: Serialize, - { - Ok(Content::Some(Box::new(tri!(value.serialize(self))))) - } - - fn serialize_unit(self) -> Result<Content, E> { - Ok(Content::Unit) - } - - fn serialize_unit_struct(self, name: &'static str) -> Result<Content, E> { - Ok(Content::UnitStruct(name)) - } - - fn serialize_unit_variant( - self, - name: &'static str, - variant_index: u32, - variant: &'static str, - ) -> Result<Content, E> { - Ok(Content::UnitVariant(name, variant_index, variant)) - } - - fn serialize_newtype_struct<T: ?Sized>( - self, - name: &'static str, - value: &T, - ) -> Result<Content, E> - where - T: Serialize, - { - Ok(Content::NewtypeStruct( - name, - Box::new(tri!(value.serialize(self))), - )) - } - - fn serialize_newtype_variant<T: ?Sized>( - self, - name: &'static str, - variant_index: u32, - variant: &'static str, - value: &T, - ) -> Result<Content, E> - where - T: Serialize, - { - Ok(Content::NewtypeVariant( - name, - variant_index, - variant, - Box::new(tri!(value.serialize(self))), - )) - } - - fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, E> { - Ok(SerializeSeq { - elements: Vec::with_capacity(len.unwrap_or(0)), - error: PhantomData, - }) - } - - fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, E> { - Ok(SerializeTuple { - elements: Vec::with_capacity(len), - error: PhantomData, - }) - } - - fn serialize_tuple_struct( - self, - name: &'static str, - len: usize, - ) -> Result<Self::SerializeTupleStruct, E> { - Ok(SerializeTupleStruct { - name, - fields: Vec::with_capacity(len), - error: PhantomData, - }) - } - - fn serialize_tuple_variant( - self, - name: &'static str, - variant_index: u32, - variant: &'static str, - len: usize, - ) -> Result<Self::SerializeTupleVariant, E> { - Ok(SerializeTupleVariant { - name, - variant_index, - variant, - fields: Vec::with_capacity(len), - error: PhantomData, - }) - } - - fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, E> { - Ok(SerializeMap { - entries: Vec::with_capacity(len.unwrap_or(0)), - key: None, - error: PhantomData, - }) - } - - fn serialize_struct( - self, - name: &'static str, - len: usize, - ) -> Result<Self::SerializeStruct, E> { - Ok(SerializeStruct { - name, - fields: Vec::with_capacity(len), - error: PhantomData, - }) - } - - fn serialize_struct_variant( - self, - name: &'static str, - variant_index: u32, - variant: &'static str, - len: usize, - ) -> Result<Self::SerializeStructVariant, E> { - Ok(SerializeStructVariant { - name, - variant_index, - variant, - fields: Vec::with_capacity(len), - error: PhantomData, - }) - } - } - - pub struct SerializeSeq<E> { - elements: Vec<Content>, - error: PhantomData<E>, - } - - impl<E> ser::SerializeSeq for SerializeSeq<E> - where - E: ser::Error, - { - type Ok = Content; - type Error = E; - - fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), E> - where - T: Serialize, - { - let value = tri!(value.serialize(ContentSerializer::<E>::new())); - self.elements.push(value); - Ok(()) - } - - fn end(self) -> Result<Content, E> { - Ok(Content::Seq(self.elements)) - } - } - - pub struct SerializeTuple<E> { - elements: Vec<Content>, - error: PhantomData<E>, - } - - impl<E> ser::SerializeTuple for SerializeTuple<E> - where - E: ser::Error, - { - type Ok = Content; - type Error = E; - - fn serialize_element<T: ?Sized>(&mut self, value: &T) -> Result<(), E> - where - T: Serialize, - { - let value = tri!(value.serialize(ContentSerializer::<E>::new())); - self.elements.push(value); - Ok(()) - } - - fn end(self) -> Result<Content, E> { - Ok(Content::Tuple(self.elements)) - } - } - - pub struct SerializeTupleStruct<E> { - name: &'static str, - fields: Vec<Content>, - error: PhantomData<E>, - } - - impl<E> ser::SerializeTupleStruct for SerializeTupleStruct<E> - where - E: ser::Error, - { - type Ok = Content; - type Error = E; - - fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), E> - where - T: Serialize, - { - let value = tri!(value.serialize(ContentSerializer::<E>::new())); - self.fields.push(value); - Ok(()) - } - - fn end(self) -> Result<Content, E> { - Ok(Content::TupleStruct(self.name, self.fields)) - } - } - - pub struct SerializeTupleVariant<E> { - name: &'static str, - variant_index: u32, - variant: &'static str, - fields: Vec<Content>, - error: PhantomData<E>, - } - - impl<E> ser::SerializeTupleVariant for SerializeTupleVariant<E> - where - E: ser::Error, - { - type Ok = Content; - type Error = E; - - fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), E> - where - T: Serialize, - { - let value = tri!(value.serialize(ContentSerializer::<E>::new())); - self.fields.push(value); - Ok(()) - } - - fn end(self) -> Result<Content, E> { - Ok(Content::TupleVariant( - self.name, - self.variant_index, - self.variant, - self.fields, - )) - } - } - - pub struct SerializeMap<E> { - entries: Vec<(Content, Content)>, - key: Option<Content>, - error: PhantomData<E>, - } - - impl<E> ser::SerializeMap for SerializeMap<E> - where - E: ser::Error, - { - type Ok = Content; - type Error = E; - - fn serialize_key<T: ?Sized>(&mut self, key: &T) -> Result<(), E> - where - T: Serialize, - { - let key = tri!(key.serialize(ContentSerializer::<E>::new())); - self.key = Some(key); - Ok(()) - } - - fn serialize_value<T: ?Sized>(&mut self, value: &T) -> Result<(), E> - where - T: Serialize, - { - let key = self - .key - .take() - .expect("serialize_value called before serialize_key"); - let value = tri!(value.serialize(ContentSerializer::<E>::new())); - self.entries.push((key, value)); - Ok(()) - } - - fn end(self) -> Result<Content, E> { - Ok(Content::Map(self.entries)) - } - - fn serialize_entry<K: ?Sized, V: ?Sized>(&mut self, key: &K, value: &V) -> Result<(), E> - where - K: Serialize, - V: Serialize, - { - let key = tri!(key.serialize(ContentSerializer::<E>::new())); - let value = tri!(value.serialize(ContentSerializer::<E>::new())); - self.entries.push((key, value)); - Ok(()) - } - } - - pub struct SerializeStruct<E> { - name: &'static str, - fields: Vec<(&'static str, Content)>, - error: PhantomData<E>, - } - - impl<E> ser::SerializeStruct for SerializeStruct<E> - where - E: ser::Error, - { - type Ok = Content; - type Error = E; - - fn serialize_field<T: ?Sized>(&mut self, key: &'static str, value: &T) -> Result<(), E> - where - T: Serialize, - { - let value = tri!(value.serialize(ContentSerializer::<E>::new())); - self.fields.push((key, value)); - Ok(()) - } - - fn end(self) -> Result<Content, E> { - Ok(Content::Struct(self.name, self.fields)) - } - } - - pub struct SerializeStructVariant<E> { - name: &'static str, - variant_index: u32, - variant: &'static str, - fields: Vec<(&'static str, Content)>, - error: PhantomData<E>, - } - - impl<E> ser::SerializeStructVariant for SerializeStructVariant<E> - where - E: ser::Error, - { - type Ok = Content; - type Error = E; - - fn serialize_field<T: ?Sized>(&mut self, key: &'static str, value: &T) -> Result<(), E> - where - T: Serialize, - { - let value = tri!(value.serialize(ContentSerializer::<E>::new())); - self.fields.push((key, value)); - Ok(()) - } - - fn end(self) -> Result<Content, E> { - Ok(Content::StructVariant( - self.name, - self.variant_index, - self.variant, - self.fields, - )) - } - } -} - -#[cfg(any(feature = "std", feature = "alloc"))] -pub struct FlatMapSerializer<'a, M: 'a>(pub &'a mut M); - -#[cfg(any(feature = "std", feature = "alloc"))] -impl<'a, M> FlatMapSerializer<'a, M> -where - M: SerializeMap + 'a, -{ - fn bad_type(what: Unsupported) -> M::Error { - ser::Error::custom(format_args!( - "can only flatten structs and maps (got {})", - what - )) - } -} - -#[cfg(any(feature = "std", feature = "alloc"))] -impl<'a, M> Serializer for FlatMapSerializer<'a, M> -where - M: SerializeMap + 'a, -{ - type Ok = (); - type Error = M::Error; - - type SerializeSeq = Impossible<Self::Ok, M::Error>; - type SerializeTuple = Impossible<Self::Ok, M::Error>; - type SerializeTupleStruct = Impossible<Self::Ok, M::Error>; - type SerializeMap = FlatMapSerializeMap<'a, M>; - type SerializeStruct = FlatMapSerializeStruct<'a, M>; - type SerializeTupleVariant = FlatMapSerializeTupleVariantAsMapValue<'a, M>; - type SerializeStructVariant = FlatMapSerializeStructVariantAsMapValue<'a, M>; - - fn serialize_bool(self, _: bool) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Boolean)) - } - - fn serialize_i8(self, _: i8) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Integer)) - } - - fn serialize_i16(self, _: i16) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Integer)) - } - - fn serialize_i32(self, _: i32) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Integer)) - } - - fn serialize_i64(self, _: i64) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Integer)) - } - - fn serialize_u8(self, _: u8) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Integer)) - } - - fn serialize_u16(self, _: u16) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Integer)) - } - - fn serialize_u32(self, _: u32) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Integer)) - } - - fn serialize_u64(self, _: u64) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Integer)) - } - - fn serialize_f32(self, _: f32) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Float)) - } - - fn serialize_f64(self, _: f64) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Float)) - } - - fn serialize_char(self, _: char) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Char)) - } - - fn serialize_str(self, _: &str) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::String)) - } - - fn serialize_bytes(self, _: &[u8]) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::ByteArray)) - } - - fn serialize_none(self) -> Result<Self::Ok, Self::Error> { - Ok(()) - } - - fn serialize_some<T: ?Sized>(self, value: &T) -> Result<Self::Ok, Self::Error> - where - T: Serialize, - { - value.serialize(self) - } - - fn serialize_unit(self) -> Result<Self::Ok, Self::Error> { - Ok(()) - } - - fn serialize_unit_struct(self, _: &'static str) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::UnitStruct)) - } - - fn serialize_unit_variant( - self, - _: &'static str, - _: u32, - _: &'static str, - ) -> Result<Self::Ok, Self::Error> { - Err(Self::bad_type(Unsupported::Enum)) - } - - fn serialize_newtype_struct<T: ?Sized>( - self, - _: &'static str, - value: &T, - ) -> Result<Self::Ok, Self::Error> - where - T: Serialize, - { - value.serialize(self) - } - - fn serialize_newtype_variant<T: ?Sized>( - self, - _: &'static str, - _: u32, - variant: &'static str, - value: &T, - ) -> Result<Self::Ok, Self::Error> - where - T: Serialize, - { - tri!(self.0.serialize_key(variant)); - self.0.serialize_value(value) - } - - fn serialize_seq(self, _: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> { - Err(Self::bad_type(Unsupported::Sequence)) - } - - fn serialize_tuple(self, _: usize) -> Result<Self::SerializeTuple, Self::Error> { - Err(Self::bad_type(Unsupported::Tuple)) - } - - fn serialize_tuple_struct( - self, - _: &'static str, - _: usize, - ) -> Result<Self::SerializeTupleStruct, Self::Error> { - Err(Self::bad_type(Unsupported::TupleStruct)) - } - - fn serialize_tuple_variant( - self, - _: &'static str, - _: u32, - variant: &'static str, - _: usize, - ) -> Result<Self::SerializeTupleVariant, Self::Error> { - tri!(self.0.serialize_key(variant)); - Ok(FlatMapSerializeTupleVariantAsMapValue::new(self.0)) - } - - fn serialize_map(self, _: Option<usize>) -> Result<Self::SerializeMap, Self::Error> { - Ok(FlatMapSerializeMap(self.0)) - } - - fn serialize_struct( - self, - _: &'static str, - _: usize, - ) -> Result<Self::SerializeStruct, Self::Error> { - Ok(FlatMapSerializeStruct(self.0)) - } - - fn serialize_struct_variant( - self, - _: &'static str, - _: u32, - inner_variant: &'static str, - _: usize, - ) -> Result<Self::SerializeStructVariant, Self::Error> { - tri!(self.0.serialize_key(inner_variant)); - Ok(FlatMapSerializeStructVariantAsMapValue::new( - self.0, - inner_variant, - )) - } -} - -#[cfg(any(feature = "std", feature = "alloc"))] -pub struct FlatMapSerializeMap<'a, M: 'a>(&'a mut M); - -#[cfg(any(feature = "std", feature = "alloc"))] -impl<'a, M> ser::SerializeMap for FlatMapSerializeMap<'a, M> -where - M: SerializeMap + 'a, -{ - type Ok = (); - type Error = M::Error; - - fn serialize_key<T: ?Sized>(&mut self, key: &T) -> Result<(), Self::Error> - where - T: Serialize, - { - self.0.serialize_key(key) - } - - fn serialize_value<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error> - where - T: Serialize, - { - self.0.serialize_value(value) - } - - fn serialize_entry<K: ?Sized, V: ?Sized>( - &mut self, - key: &K, - value: &V, - ) -> Result<(), Self::Error> - where - K: Serialize, - V: Serialize, - { - self.0.serialize_entry(key, value) - } - - fn end(self) -> Result<(), Self::Error> { - Ok(()) - } -} - -#[cfg(any(feature = "std", feature = "alloc"))] -pub struct FlatMapSerializeStruct<'a, M: 'a>(&'a mut M); - -#[cfg(any(feature = "std", feature = "alloc"))] -impl<'a, M> ser::SerializeStruct for FlatMapSerializeStruct<'a, M> -where - M: SerializeMap + 'a, -{ - type Ok = (); - type Error = M::Error; - - fn serialize_field<T: ?Sized>( - &mut self, - key: &'static str, - value: &T, - ) -> Result<(), Self::Error> - where - T: Serialize, - { - self.0.serialize_entry(key, value) - } - - fn end(self) -> Result<(), Self::Error> { - Ok(()) - } -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -#[cfg(any(feature = "std", feature = "alloc"))] -pub struct FlatMapSerializeTupleVariantAsMapValue<'a, M: 'a> { - map: &'a mut M, - fields: Vec<Content>, -} - -#[cfg(any(feature = "std", feature = "alloc"))] -impl<'a, M> FlatMapSerializeTupleVariantAsMapValue<'a, M> -where - M: SerializeMap + 'a, -{ - fn new(map: &'a mut M) -> Self { - FlatMapSerializeTupleVariantAsMapValue { - map, - fields: Vec::new(), - } - } -} - -#[cfg(any(feature = "std", feature = "alloc"))] -impl<'a, M> ser::SerializeTupleVariant for FlatMapSerializeTupleVariantAsMapValue<'a, M> -where - M: SerializeMap + 'a, -{ - type Ok = (); - type Error = M::Error; - - fn serialize_field<T: ?Sized>(&mut self, value: &T) -> Result<(), Self::Error> - where - T: Serialize, - { - let value = tri!(value.serialize(ContentSerializer::<M::Error>::new())); - self.fields.push(value); - Ok(()) - } - - fn end(self) -> Result<(), Self::Error> { - tri!(self.map.serialize_value(&Content::Seq(self.fields))); - Ok(()) - } -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -#[cfg(any(feature = "std", feature = "alloc"))] -pub struct FlatMapSerializeStructVariantAsMapValue<'a, M: 'a> { - map: &'a mut M, - name: &'static str, - fields: Vec<(&'static str, Content)>, -} - -#[cfg(any(feature = "std", feature = "alloc"))] -impl<'a, M> FlatMapSerializeStructVariantAsMapValue<'a, M> -where - M: SerializeMap + 'a, -{ - fn new(map: &'a mut M, name: &'static str) -> FlatMapSerializeStructVariantAsMapValue<'a, M> { - FlatMapSerializeStructVariantAsMapValue { - map, - name, - fields: Vec::new(), - } - } -} - -#[cfg(any(feature = "std", feature = "alloc"))] -impl<'a, M> ser::SerializeStructVariant for FlatMapSerializeStructVariantAsMapValue<'a, M> -where - M: SerializeMap + 'a, -{ - type Ok = (); - type Error = M::Error; - - fn serialize_field<T: ?Sized>( - &mut self, - key: &'static str, - value: &T, - ) -> Result<(), Self::Error> - where - T: Serialize, - { - let value = tri!(value.serialize(ContentSerializer::<M::Error>::new())); - self.fields.push((key, value)); - Ok(()) - } - - fn end(self) -> Result<(), Self::Error> { - tri!(self - .map - .serialize_value(&Content::Struct(self.name, self.fields))); - Ok(()) - } -} - -pub struct AdjacentlyTaggedEnumVariant { - pub enum_name: &'static str, - pub variant_index: u32, - pub variant_name: &'static str, -} - -impl Serialize for AdjacentlyTaggedEnumVariant { - fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> - where - S: Serializer, - { - serializer.serialize_unit_variant(self.enum_name, self.variant_index, self.variant_name) - } -} - -// Error when Serialize for a non_exhaustive remote enum encounters a variant -// that is not recognized. -pub struct CannotSerializeVariant<T>(pub T); - -impl<T> Display for CannotSerializeVariant<T> -where - T: Debug, -{ - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - write!(formatter, "enum variant cannot be serialized: {:?}", self.0) - } -} |