Skip to content

Commit af5ff97

Browse files
committed
serde trait check
1 parent 79d531c commit af5ff97

File tree

5 files changed

+33
-6
lines changed

5 files changed

+33
-6
lines changed

packed_struct/src/packing.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub trait PackedStructSlice where Self: Sized {
4141
}
4242
}
4343

44-
#[cfg_attr(feature = "use_serde", derive(Serialize))]
44+
#[cfg_attr(feature = "use_serde", derive(Serialize, Deserialize))]
4545
#[derive(Debug, Copy, Clone, PartialEq)]
4646
/// Packing errors that might occur during packing or unpacking
4747
pub enum PackingError {

packed_struct/src/types_num.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,18 @@ impl<T, B> Display for Integer<T, B> where T: Display {
3030

3131
#[cfg(feature = "use_serde")]
3232
mod serialize {
33-
33+
use serde::ser::{Serialize, Serializer};
34+
use serde::de::{Deserialize, Deserializer};
3435

35-
impl<T, B> Serialize for Integer<T, B> where T: Serialize {
36+
impl<T, B> Serialize for super::Integer<T, B> where T: Serialize {
3637
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
3738
where S: Serializer
3839
{
3940
self.num.serialize(serializer)
4041
}
4142
}
4243

43-
impl<'de, T, B> Deserialize<'de> for Integer<T, B> where T: Deserialize<'de>, T: Into<Integer<T, B>> {
44+
impl<'de, T, B> Deserialize<'de> for super::Integer<T, B> where T: Deserialize<'de>, T: Into<super::Integer<T, B>> {
4445
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
4546
where D: Deserializer<'de>
4647
{

packed_struct/src/types_reserved.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ pub trait ReservedBitValue {
1515
}
1616

1717
#[cfg_attr(feature = "use_serde", derive(Serialize, Deserialize))]
18+
#[derive(Default, Copy, Clone, PartialEq)]
1819
pub struct BitOne;
1920
impl ReservedBitValue for BitOne {
2021
fn get_reserved_bit_value_byte() -> u8 {
@@ -23,6 +24,7 @@ impl ReservedBitValue for BitOne {
2324
}
2425

2526
#[cfg_attr(feature = "use_serde", derive(Serialize, Deserialize))]
27+
#[derive(Default, Copy, Clone, PartialEq)]
2628
pub struct BitZero;
2729
impl ReservedBitValue for BitZero {
2830
fn get_reserved_bit_value_byte() -> u8 {
@@ -32,6 +34,7 @@ impl ReservedBitValue for BitZero {
3234

3335
/// Always packs into the associated bit value. Ignores the input when unpacking.
3436
#[cfg_attr(feature = "use_serde", derive(Serialize, Deserialize))]
37+
#[derive(Default, Copy, Clone, PartialEq)]
3538
pub struct ReservedBits<V, B> {
3639
value: V,
3740
bits: PhantomData<B>

packed_struct_tests/Cargo.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ authors = ["Rudi Benkovic <[email protected]>"]
55
publish = false
66

77
[dependencies]
8-
packed_struct = { version = "0.4", features = ["byte_types_64"] }
8+
packed_struct = { version = "0.4", features = ["byte_types_64", "use_serde"] }
99
packed_struct_codegen = "0.4"
10-
error-chain = "0.12.0"
10+
error-chain = "0.12.0"
11+
serde = "1.0"
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
extern crate packed_struct;
2+
extern crate serde;
3+
4+
5+
use packed_struct::prelude::*;
6+
7+
#[test]
8+
fn test_serialization_traits() {
9+
10+
check_serde_support::<Integer<u8, packed_bits::Bits8>>();
11+
check_serde_support::<PackingError>();
12+
check_serde_support::<BitOne>();
13+
check_serde_support::<BitZero>();
14+
check_serde_support::<ReservedBits<u8, packed_bits::Bits8>>();
15+
}
16+
17+
fn check_serde_support<'a, T>()
18+
where
19+
T: serde::Serialize,
20+
T: serde::Deserialize<'a>
21+
{
22+
}

0 commit comments

Comments
 (0)