diff options
author | bors-ng[bot] <bors-ng[bot]@users.noreply.github.com> | 2017-01-29 09:30:09 +0000 |
---|---|---|
committer | bors-ng[bot] <bors-ng[bot]@users.noreply.github.com> | 2017-01-29 09:30:09 +0000 |
commit | 2cc32847ac45bee7d0b60020edda3cce7a07b4ce (patch) | |
tree | 49a0fc14c3ed50947c2d2f771998cdf38c3948a2 /src/ser/void.rs | |
parent | 9aefb1c02d8cb5746f07dc6ac461ce8eedced5e3 (diff) | |
parent | 3e9ebe4fd7428da26dd75e2cc6e5025c847c99e6 (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.rs | 122 |
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) + } +} |