deser_incomplete/source/
json.rs1use super::Source;
2
3pub struct JsonStr<'de, T: std::borrow::Borrow<str> + ?Sized>(pub &'de T);
5
6pub struct JsonBytes<'de, T: std::borrow::Borrow<[u8]> + ?Sized>(pub &'de T);
8
9impl<'de, T: std::borrow::Borrow<str> + ?Sized> Source<'de> for JsonStr<'de, T> {
10 type DeserializerStorage = serde_json::Deserializer<serde_json::de::StrRead<'de>>;
11 type Deserializer<'storage>
12 = &'storage mut serde_json::Deserializer<serde_json::de::StrRead<'de>>
13 where
14 'de: 'storage;
15 type Error = serde_json::Error;
16
17 fn recreate_deserializer_storage(&mut self) -> Self::DeserializerStorage {
18 serde_json::Deserializer::from_str(self.0.borrow())
19 }
20
21 fn use_deserializer_from_storage<'storage>(
22 storage: &'storage mut Option<serde_json::Deserializer<serde_json::de::StrRead<'de>>>,
23 ) -> &'storage mut serde_json::Deserializer<serde_json::de::StrRead<'de>> {
24 storage
25 .as_mut()
26 .expect("use_deserializer_from_storage only called on Some")
27 }
28}
29
30impl<'de, T: std::borrow::Borrow<[u8]> + ?Sized> Source<'de> for JsonBytes<'de, T> {
31 type DeserializerStorage = serde_json::Deserializer<serde_json::de::SliceRead<'de>>;
32 type Deserializer<'storage>
33 = &'storage mut serde_json::Deserializer<serde_json::de::SliceRead<'de>>
34 where
35 'de: 'storage;
36 type Error = serde_json::Error;
37
38 fn recreate_deserializer_storage(&mut self) -> Self::DeserializerStorage {
39 serde_json::Deserializer::from_slice(self.0.borrow())
40 }
41
42 fn use_deserializer_from_storage<'storage>(
43 storage: &'storage mut Option<serde_json::Deserializer<serde_json::de::SliceRead<'de>>>,
44 ) -> &'storage mut serde_json::Deserializer<serde_json::de::SliceRead<'de>> {
45 storage
46 .as_mut()
47 .expect("use_deserializer_from_storage only called on Some")
48 }
49}