conjure_serde/json/de/
server.rs1use crate::de::null_collections_behavior::NullCollectionsBehavior;
15use crate::de::unknown_fields_behavior::UnknownFieldsBehavior;
16use crate::json::de::client::ValueBehavior;
17use serde::de;
18use serde_json::de::{IoRead, Read, SliceRead, StrRead};
19use serde_json::Error;
20use std::io;
21
22pub fn server_from_reader<R, T>(reader: R) -> Result<T, Error>
24where
25 R: io::Read,
26 T: de::DeserializeOwned,
27{
28 let mut de = ServerDeserializer::from_reader(reader);
29 let value = T::deserialize(&mut de)?;
30 de.end()?;
31 Ok(value)
32}
33
34pub fn server_from_str<'a, T>(s: &'a str) -> Result<T, Error>
36where
37 T: de::Deserialize<'a>,
38{
39 let mut de = ServerDeserializer::from_str(s);
40 let value = T::deserialize(&mut de)?;
41 de.end()?;
42 Ok(value)
43}
44
45pub fn server_from_slice<'a, T>(s: &'a [u8]) -> Result<T, Error>
47where
48 T: de::Deserialize<'a>,
49{
50 let mut de = ServerDeserializer::from_slice(s);
51 let value = T::deserialize(&mut de)?;
52 de.end()?;
53 Ok(value)
54}
55
56pub struct ServerDeserializer<R>(serde_json::Deserializer<R>);
61
62impl<R> ServerDeserializer<IoRead<R>>
63where
64 R: io::Read,
65{
66 pub fn from_reader(reader: R) -> ServerDeserializer<IoRead<R>> {
68 ServerDeserializer(serde_json::Deserializer::from_reader(reader))
69 }
70}
71
72impl<'a> ServerDeserializer<SliceRead<'a>> {
73 pub fn from_slice(bytes: &'a [u8]) -> ServerDeserializer<SliceRead<'a>> {
75 ServerDeserializer(serde_json::Deserializer::from_slice(bytes))
76 }
77}
78
79impl<'a> ServerDeserializer<StrRead<'a>> {
80 #[allow(clippy::should_implement_trait)] pub fn from_str(s: &'a str) -> ServerDeserializer<StrRead<'a>> {
83 ServerDeserializer(serde_json::Deserializer::from_str(s))
84 }
85}
86
87impl<'de, R> ServerDeserializer<R>
88where
89 R: Read<'de>,
90{
91 pub fn end(&mut self) -> Result<(), Error> {
93 self.0.end()
94 }
95}
96
97impl<'a, 'de, R> de::Deserializer<'de> for &'a mut ServerDeserializer<R>
98where
99 R: Read<'de>,
100{
101 impl_deserialize_body!(
102 &'a mut serde_json::Deserializer<R>,
103 UnknownFieldsBehavior<NullCollectionsBehavior<ValueBehavior>>
104 );
105
106 fn is_human_readable(&self) -> bool {
108 true
109 }
110}