use core::convert::{TryFrom, TryInto};
use deku::prelude::*;
#[test]
fn test_update() {
#[derive(PartialEq, Debug, DekuRead, DekuWrite)]
struct TestStruct {
#[deku(update = "5")]
field_a: u8,
}
let test_data: Vec<u8> = [0x01].to_vec();
let mut ret_read = TestStruct::try_from(test_data.as_slice()).unwrap();
assert_eq!(TestStruct { field_a: 0x01 }, ret_read);
ret_read.update().unwrap();
assert_eq!(0x05, ret_read.field_a);
let ret_write: Vec<u8> = ret_read.try_into().unwrap();
assert_eq!([0x05].to_vec(), ret_write);
}
#[test]
fn test_update_from_field() {
#[derive(PartialEq, Debug, DekuRead, DekuWrite)]
struct TestStruct {
#[deku(update = "self.data.len()")]
count: u8,
#[deku(count = "count")]
data: Vec<u8>,
}
let test_data: Vec<u8> = [0x02, 0xaa, 0xbb].to_vec();
let mut ret_read = TestStruct::try_from(test_data.as_slice()).unwrap();
assert_eq!(
TestStruct {
count: 0x02,
data: vec![0xaa, 0xbb]
},
ret_read
);
ret_read.data.push(0xff);
ret_read.update().unwrap();
assert_eq!(3, ret_read.count);
let ret_write: Vec<u8> = ret_read.try_into().unwrap();
assert_eq!([0x03, 0xaa, 0xbb, 0xff].to_vec(), ret_write);
}
#[test]
#[cfg(feature = "descriptive-errors")]
#[should_panic(
expected = "Parse(\"error parsing int: out of range integral type conversion attempted\")"
)]
fn test_update_error() {
#[derive(PartialEq, Debug, DekuRead, DekuWrite)]
struct TestStruct {
#[deku(update = "256")]
count: u8,
}
let mut val = TestStruct { count: 0x01 };
val.update().unwrap();
}