xmlity/
noop.rs

1use std::convert::Infallible;
2
3use crate::ser;
4
5/// A serializer that does nothing. This is useful as a sub-type for serializers which only do certain parts of [`ser::Serializer`].
6pub struct NoopDeSerializer<Ok, Err> {
7    _infallible: Infallible,
8    _marker: std::marker::PhantomData<(Ok, Err)>,
9}
10
11impl<Ok, Err: ser::Error> crate::ser::SerializeSeq for NoopDeSerializer<Ok, Err> {
12    type Ok = Ok;
13
14    type Error = Err;
15
16    fn serialize_element<V: ser::Serialize>(&mut self, _: &V) -> Result<Self::Ok, Self::Error> {
17        unreachable!("Self has infallible child - cannot be constructed and thus cannot be used.")
18    }
19
20    fn end(self) -> Result<Self::Ok, Self::Error> {
21        unreachable!("Self has infallible child - cannot be constructed and thus cannot be used.")
22    }
23}
24
25impl<Ok, Err: ser::Error> crate::ser::SerializeAttributes for NoopDeSerializer<Ok, Err> {
26    type Ok = Ok;
27
28    type Error = Err;
29
30    fn serialize_attribute<A: ser::SerializeAttribute>(
31        &mut self,
32        _a: &A,
33    ) -> Result<Self::Ok, Self::Error> {
34        unreachable!("Self has infallible child - cannot be constructed and thus cannot be used.")
35    }
36}
37
38impl<Ok, Err: ser::Error> crate::ser::SerializeElementAttributes for NoopDeSerializer<Ok, Err> {
39    type ChildrenSerializeSeq = NoopDeSerializer<Ok, Err>;
40
41    fn serialize_children(self) -> Result<Self::ChildrenSerializeSeq, Self::Error> {
42        unreachable!("Self has infallible child - cannot be constructed and thus cannot be used.")
43    }
44
45    fn end(self) -> Result<Self::Ok, Self::Error> {
46        unreachable!("Self has infallible child - cannot be constructed and thus cannot be used.")
47    }
48}
49
50impl<Ok, Err: ser::Error> crate::ser::SerializeElement for NoopDeSerializer<Ok, Err> {
51    type Ok = Ok;
52
53    type Error = Err;
54
55    type ChildrenSerializeSeq = NoopDeSerializer<Ok, Err>;
56
57    type SerializeElementAttributes = NoopDeSerializer<Ok, Err>;
58
59    fn include_prefix(
60        &mut self,
61        _should_enforce: crate::ser::IncludePrefix,
62    ) -> Result<Self::Ok, Self::Error> {
63        unreachable!("Self has infallible child - cannot be constructed and thus cannot be used.")
64    }
65
66    fn preferred_prefix(
67        &mut self,
68        _preferred_prefix: Option<crate::Prefix<'_>>,
69    ) -> Result<Self::Ok, Self::Error> {
70        unreachable!("Self has infallible child - cannot be constructed and thus cannot be used.")
71    }
72
73    fn serialize_attributes(self) -> Result<Self::SerializeElementAttributes, Self::Error> {
74        unreachable!("Self has infallible child - cannot be constructed and thus cannot be used.")
75    }
76
77    fn serialize_children(self) -> Result<Self::ChildrenSerializeSeq, Self::Error> {
78        unreachable!("Self has infallible child - cannot be constructed and thus cannot be used.")
79    }
80
81    fn end(self) -> Result<Self::Ok, Self::Error> {
82        unreachable!("Self has infallible child - cannot be constructed and thus cannot be used.")
83    }
84}