Skip to content

Commit 3847e54

Browse files
committed
Implement Encode & Decode for Reverse<T> types
1 parent 8792100 commit 3847e54

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

src/de/impls.rs

+13
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use core::{
1616
ops::{Bound, Range, RangeInclusive},
1717
time::Duration,
1818
};
19+
use std::cmp::Reverse;
1920

2021
impl Decode for bool {
2122
fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> {
@@ -405,6 +406,18 @@ impl<'de, T: BorrowDecode<'de>> BorrowDecode<'de> for Wrapping<T> {
405406
}
406407
}
407408

409+
impl<T: Decode> Decode for Reverse<T> {
410+
fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> {
411+
Ok(Reverse(T::decode(decoder)?))
412+
}
413+
}
414+
415+
impl<'de, T: BorrowDecode<'de>> BorrowDecode<'de> for Reverse<T> {
416+
fn borrow_decode<D: BorrowDecoder<'de>>(decoder: &mut D) -> Result<Self, DecodeError> {
417+
Ok(Reverse(T::borrow_decode(decoder)?))
418+
}
419+
}
420+
408421
impl Decode for char {
409422
fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> {
410423
let mut array = [0u8; 4];

src/enc/impls.rs

+7
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use core::{
1313
ops::{Bound, Range, RangeInclusive},
1414
time::Duration,
1515
};
16+
use std::cmp::Reverse;
1617

1718
impl Encode for () {
1819
fn encode<E: Encoder>(&self, _: &mut E) -> Result<(), EncodeError> {
@@ -280,6 +281,12 @@ impl<T: Encode> Encode for Wrapping<T> {
280281
}
281282
}
282283

284+
impl<T: Encode> Encode for Reverse<T> {
285+
fn encode<E: Encoder>(&self, encoder: &mut E) -> Result<(), EncodeError> {
286+
self.0.encode(encoder)
287+
}
288+
}
289+
283290
impl Encode for char {
284291
fn encode<E: Encoder>(&self, encoder: &mut E) -> Result<(), EncodeError> {
285292
encode_utf8(encoder.writer(), *self)

tests/basic_types.rs

+16
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use bincode::error::DecodeError;
44
use core::cell::{Cell, RefCell};
55
use core::ops::Bound;
66
use core::time::Duration;
7+
use std::cmp::Reverse;
78
use std::num::*;
89
use utils::{the_same, the_same_with_comparer};
910

@@ -128,6 +129,21 @@ fn test_numbers() {
128129
the_same(Wrapping(5i64));
129130
the_same(Wrapping(5i128));
130131
the_same(Wrapping(5isize));
132+
133+
// Reverse types
134+
the_same(Reverse(5u8));
135+
the_same(Reverse(5u16));
136+
the_same(Reverse(5u32));
137+
the_same(Reverse(5u64));
138+
the_same(Reverse(5u128));
139+
the_same(Reverse(5usize));
140+
141+
the_same(Reverse(5i8));
142+
the_same(Reverse(5i16));
143+
the_same(Reverse(5i32));
144+
the_same(Reverse(5i64));
145+
the_same(Reverse(5i128));
146+
the_same(Reverse(5isize));
131147
}
132148

133149
#[test]

0 commit comments

Comments
 (0)