Skip to content

Commit 5887673

Browse files
committed
Fix Option
1 parent 713c364 commit 5887673

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
## Unreleased
66

7+
- Fixed the `Value` implementation for `Option<T>` so it now serializes and deserializes properly
8+
79
## 5.0.0 31-07-25
810

911
- Added `Key` implementation for the unit type `()` for easy storage of a single value

src/map.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,7 +1059,7 @@ impl<'a, T: Value<'a>> Value<'a> for Option<T> {
10591059
fn serialize_into(&self, buffer: &mut [u8]) -> Result<usize, SerializationError> {
10601060
if let Some(val) = self {
10611061
<bool as Value>::serialize_into(&true, buffer)?;
1062-
<T as Value>::serialize_into(val, buffer)
1062+
<T as Value>::serialize_into(val, &mut buffer[1..]).map(|len| len + 1)
10631063
} else {
10641064
<bool as Value>::serialize_into(&false, buffer)
10651065
}
@@ -1070,7 +1070,7 @@ impl<'a, T: Value<'a>> Value<'a> for Option<T> {
10701070
Self: Sized,
10711071
{
10721072
if <bool as Value>::deserialize_from(buffer)? {
1073-
Ok(Some(<T as Value>::deserialize_from(buffer)?))
1073+
Ok(Some(<T as Value>::deserialize_from(&buffer[1..])?))
10741074
} else {
10751075
Ok(None)
10761076
}
@@ -1932,4 +1932,19 @@ mod tests {
19321932
.unwrap();
19331933
assert_eq!(item, &[5, 6]);
19341934
}
1935+
1936+
#[test]
1937+
async fn option_value() {
1938+
let mut buffer = [0; 2];
1939+
1940+
assert_eq!(Some(42u8).serialize_into(&mut buffer), Ok(2));
1941+
assert_eq!(Option::<u8>::deserialize_from(&buffer), Ok(Some(42u8)));
1942+
assert_eq!(buffer, [1, 42]);
1943+
1944+
let mut buffer = [0; 1];
1945+
1946+
assert_eq!(Option::<u8>::None.serialize_into(&mut buffer), Ok(1));
1947+
assert_eq!(Option::<u8>::deserialize_from(&buffer), Ok(None));
1948+
assert_eq!(buffer, [0]);
1949+
}
19351950
}

0 commit comments

Comments
 (0)