1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
#![doc(html_root_url = "https://docs.rs/amadeus-serde/0.2.5")] #![feature(array_value_iter)] #![feature(specialization)] #![feature(type_alias_impl_trait)] #![allow(incomplete_features)] mod csv; mod impls; mod json; #[doc(hidden)] pub use serde as _internal; use amadeus_types::SchemaIncomplete; use serde::{Deserializer, Serializer}; use std::fmt::Debug; pub use self::{ csv::*, json::{Json, JsonError} }; pub trait SerdeData where Self: Clone + PartialEq + Debug + 'static, { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer; fn deserialize<'de, D>( deserializer: D, schema: Option<SchemaIncomplete>, ) -> Result<Self, D::Error> where D: Deserializer<'de>; } impl<T> SerdeData for Box<T> where T: SerdeData, { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer, { (**self).serialize(serializer) } default fn deserialize<'de, D>( deserializer: D, schema: Option<SchemaIncomplete>, ) -> Result<Self, D::Error> where D: Deserializer<'de>, { T::deserialize(deserializer, schema).map(Box::new) } } #[repr(transparent)] pub struct SerdeSerialize<'a, T: SerdeData>(pub &'a T); impl<'a, T> serde::Serialize for SerdeSerialize<'a, T> where T: SerdeData, { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer, { self.0.serialize(serializer) } } #[repr(transparent)] pub struct SerdeDeserialize<T: SerdeData>(pub T); impl<'de, T> serde::Deserialize<'de> for SerdeDeserialize<T> where T: SerdeData, { fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de>, { T::deserialize(deserializer, None).map(Self) } } #[repr(transparent)] pub struct SerdeDeserializeGroup<T: SerdeData>(pub T); impl<'de, T> serde::Deserialize<'de> for SerdeDeserializeGroup<T> where T: SerdeData, { fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: Deserializer<'de>, { T::deserialize(deserializer, Some(SchemaIncomplete::Group(None))).map(Self) } }