Skip to content

Commit fbc9ca3

Browse files
amirboucsnover
authored andcommitted
Implement Default and From<T> for PosValue<T>
1 parent be793f2 commit fbc9ca3

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

binrw/src/pos_value.rs

+18
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,21 @@ impl<U, T: PartialEq<U>> PartialEq<U> for PosValue<T> {
9494
self.val == *other
9595
}
9696
}
97+
98+
impl<T: Default> Default for PosValue<T> {
99+
fn default() -> Self {
100+
Self {
101+
val: Default::default(),
102+
pos: Default::default(),
103+
}
104+
}
105+
}
106+
107+
impl<T> From<T> for PosValue<T> {
108+
fn from(val: T) -> Self {
109+
Self {
110+
val,
111+
pos: Default::default(),
112+
}
113+
}
114+
}

binrw/tests/pos_value.rs

+12-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use binrw::{io::Cursor, BinRead, BinReaderExt, BinWrite, PosValue};
55

66
#[test]
77
fn pos_value() {
8-
#[derive(BinRead, BinWrite)]
8+
#[derive(BinRead, BinWrite, Default)]
99
struct MyType {
1010
a: u16,
1111
b: PosValue<u8>,
@@ -28,4 +28,15 @@ fn pos_value() {
2828
val.write_be(&mut Cursor::new(&mut output)).unwrap();
2929

3030
assert_eq!(output, b"\xFF\xFE\x01");
31+
let default_val = MyType::default();
32+
assert_eq!(default_val.a, u16::default());
33+
assert_eq!(*default_val.b, u8::default());
34+
assert_eq!(default_val.b.pos, u64::default());
35+
36+
let from = MyType {
37+
a: val.a,
38+
b: (*val.b).into(),
39+
};
40+
assert_eq!(from.a, val.a);
41+
assert_eq!(from.b, *val.b);
3142
}

0 commit comments

Comments
 (0)