java_mapping_serde/de/
impl.rs1use crate::{Deserialize, Deserializer};
2
3impl<'de> Deserialize<'de> for () {
4 const IS_CONDITIONAL: bool = false;
5
6 #[inline]
7 fn deserialize<D>(deserializer: D) -> Result<Option<Self>, D::Error>
8 where
9 D: Deserializer<'de>,
10 {
11 drop(deserializer);
12 Ok(Some(()))
13 }
14}
15
16#[cfg(feature = "alloc")]
17impl<'de, T> Deserialize<'de> for alloc::vec::Vec<T>
18where
19 T: Deserialize<'de>,
20{
21 const IS_CONDITIONAL: bool = false;
22
23 fn deserialize<D>(mut deserializer: D) -> Result<Option<Self>, D::Error>
24 where
25 D: Deserializer<'de>,
26 {
27 use core::marker::PhantomData;
28
29 struct __TypeCheck<T>(PhantomData<T>);
30
31 impl<'de, T> __TypeCheck<T>
32 where
33 T: Deserialize<'de>,
34 {
35 const __VALID: () = assert!(
36 T::IS_CONDITIONAL,
37 "unconditional type is not supported by collections"
38 );
39 }
40
41 let _: () = __TypeCheck::<T>::__VALID;
42
43 let mut vec = Self::new();
45 while let Some(element) = T::deserialize(&mut deserializer)? {
46 vec.push(element);
47 }
48
49 Ok(Some(vec))
50 }
51}
52
53#[cfg(feature = "alloc")]
54impl<'de, T> Deserialize<'de> for alloc::boxed::Box<[T]>
55where
56 T: Deserialize<'de>,
57{
58 const IS_CONDITIONAL: bool = alloc::vec::Vec::<T>::IS_CONDITIONAL;
59
60 #[inline]
61 fn deserialize<D>(deserializer: D) -> Result<Option<Self>, D::Error>
62 where
63 D: Deserializer<'de>,
64 {
65 alloc::vec::Vec::deserialize(deserializer).map(|o| o.map(alloc::vec::Vec::into_boxed_slice))
66 }
67}