deser_incomplete/source/
json.rs

1use super::Source;
2
3/// Essentially [`serde_json::from_str`].
4pub struct JsonStr<'de, T: std::borrow::Borrow<str> + ?Sized>(pub &'de T);
5
6/// Essentially [`serde_json::from_slice`].
7pub 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}