summaryrefslogtreecommitdiff
path: root/src/ser/void.rs
diff options
context:
space:
mode:
authorbors-ng[bot] <bors-ng[bot]@users.noreply.github.com>2017-01-29 09:30:09 +0000
committerbors-ng[bot] <bors-ng[bot]@users.noreply.github.com>2017-01-29 09:30:09 +0000
commit2cc32847ac45bee7d0b60020edda3cce7a07b4ce (patch)
tree49a0fc14c3ed50947c2d2f771998cdf38c3948a2 /src/ser/void.rs
parent9aefb1c02d8cb5746f07dc6ac461ce8eedced5e3 (diff)
parent3e9ebe4fd7428da26dd75e2cc6e5025c847c99e6 (diff)
Merge #10
10: Update to serde 0.9.0 and various improvements
Diffstat (limited to 'src/ser/void.rs')
-rw-r--r--src/ser/void.rs122
1 files changed, 122 insertions, 0 deletions
diff --git a/src/ser/void.rs b/src/ser/void.rs
new file mode 100644
index 0000000..4765bb7
--- /dev/null
+++ b/src/ser/void.rs
@@ -0,0 +1,122 @@
+use ser::Error;
+use serde::ser;
+use std::marker::PhantomData;
+use void;
+
+pub struct VoidSerializer<Ok> {
+ void: void::Void,
+ _marker: PhantomData<Ok>,
+}
+
+impl<Ok> ser::SerializeSeq for VoidSerializer<Ok> {
+ type Ok = Ok;
+ type Error = Error;
+
+ fn serialize_element<T: ?Sized + ser::Serialize>(&mut self,
+ _value: &T)
+ -> Result<(), Error> {
+ void::unreachable(self.void)
+ }
+
+ fn end(self) -> Result<Ok, Error> {
+ void::unreachable(self.void)
+ }
+}
+
+impl<Ok> ser::SerializeTuple for VoidSerializer<Ok> {
+ type Ok = Ok;
+ type Error = Error;
+
+ fn serialize_element<T: ?Sized + ser::Serialize>(&mut self,
+ _value: &T)
+ -> Result<(), Error> {
+ void::unreachable(self.void)
+ }
+
+ fn end(self) -> Result<Ok, Error> {
+ void::unreachable(self.void)
+ }
+}
+
+impl<Ok> ser::SerializeTupleStruct for VoidSerializer<Ok> {
+ type Ok = Ok;
+ type Error = Error;
+
+ fn serialize_field<T: ?Sized + ser::Serialize>(&mut self,
+ _value: &T)
+ -> Result<(), Error> {
+ void::unreachable(self.void)
+ }
+
+ fn end(self) -> Result<Ok, Error> {
+ void::unreachable(self.void)
+ }
+}
+
+impl<Ok> ser::SerializeTupleVariant for VoidSerializer<Ok> {
+ type Ok = Ok;
+ type Error = Error;
+
+ fn serialize_field<T: ?Sized + ser::Serialize>(&mut self,
+ _value: &T)
+ -> Result<(), Error> {
+ void::unreachable(self.void)
+ }
+
+ fn end(self) -> Result<Ok, Error> {
+ void::unreachable(self.void)
+ }
+}
+
+impl<Ok> ser::SerializeMap for VoidSerializer<Ok> {
+ type Ok = Ok;
+ type Error = Error;
+
+ fn serialize_key<T: ?Sized + ser::Serialize>(&mut self,
+ _key: &T)
+ -> Result<(), Error> {
+ void::unreachable(self.void)
+ }
+
+ fn serialize_value<T: ?Sized + ser::Serialize>(&mut self,
+ _value: &T)
+ -> Result<(), Error> {
+ void::unreachable(self.void)
+ }
+
+ fn end(self) -> Result<Ok, Error> {
+ void::unreachable(self.void)
+ }
+}
+
+impl<Ok> ser::SerializeStruct for VoidSerializer<Ok> {
+ type Ok = Ok;
+ type Error = Error;
+
+ fn serialize_field<T: ?Sized + ser::Serialize>(&mut self,
+ _key: &'static str,
+ _value: &T)
+ -> Result<(), Error> {
+ void::unreachable(self.void)
+ }
+
+ fn end(self) -> Result<Ok, Error> {
+ void::unreachable(self.void)
+ }
+}
+
+impl<Ok> ser::SerializeStructVariant for VoidSerializer<Ok> {
+ type Ok = Ok;
+ type Error = Error;
+
+ fn serialize_field<T: ?Sized + ser::Serialize>(&mut self,
+ _key: &'static str,
+ _value: &T)
+ -> Result<(), Error> {
+ void::unreachable(self.void)
+ }
+
+ fn end(self) -> Result<Ok, Error> {
+ void::unreachable(self.void)
+ }
+}