Skip to content

Commit 6386b1f

Browse files
authored
Merge pull request #2 from hashmismatch/int_serde
serde support for integer types
2 parents bd4eb57 + e3c8606 commit 6386b1f

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

packed_struct/src/types_num.rs

+19
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use internal_prelude::v1::*;
66

77
use super::types_bits::*;
88

9+
910
/// A bit-limited integer, stored in a native type that is at least
1011
/// as many bits wide as the desired size.
1112
#[derive(Default, Debug, Copy, Clone)]
@@ -14,6 +15,24 @@ pub struct Integer<T, B> {
1415
bits: PhantomData<B>
1516
}
1617

18+
use serde::ser::{Serialize, Serializer};
19+
impl<T, B> Serialize for Integer<T, B> where T: Serialize {
20+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
21+
where S: Serializer
22+
{
23+
self.num.serialize(serializer)
24+
}
25+
}
26+
27+
use serde::de::{Deserialize, Deserializer};
28+
impl<'de, T, B> Deserialize<'de> for Integer<T, B> where T: Deserialize<'de>, T: Into<Integer<T, B>> {
29+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
30+
where D: Deserializer<'de>
31+
{
32+
<T>::deserialize(deserializer).map(|n| n.into())
33+
}
34+
}
35+
1736
impl<T, B> PartialEq for Integer<T, B> where T: PartialEq {
1837
fn eq(&self, other: &Self) -> bool {
1938
self.num.eq(&other.num)

0 commit comments

Comments
 (0)