#![cfg(all(feature = "derive", feature = "io", feature = "io-std"))]
use simple_endian::{EndianRead, EndianWrite, Endianize, read_specific, write_specific};
#[derive(Endianize, Clone, Copy, Debug, PartialEq, Eq)]
#[endian(be)]
#[wire_derive(Clone, Copy, Debug, PartialEq, Eq)]
struct TupleDemo(u16, u32);
#[test]
fn tuple_wire_has_io_and_roundtrips() {
fn _assert_io<T: EndianRead + EndianWrite>() {}
_assert_io::<TupleDemoWire>();
let v = TupleDemo(0x0102, 0x0304_0506);
let wire: TupleDemoWire = v.into();
let mut buf = Vec::new();
write_specific(&mut buf, &wire).unwrap();
assert_eq!(buf, vec![0x01, 0x02, 0x03, 0x04, 0x05, 0x06]);
let mut cursor = std::io::Cursor::new(buf);
let wire2: TupleDemoWire = read_specific(&mut cursor).unwrap();
assert_eq!(wire2, wire);
let v2: TupleDemo = wire2.into();
assert_eq!(v2, v);
}
#[test]
fn tuple_packed_wire_writes_safely() {
#[derive(Endianize, Clone, Copy, Debug, PartialEq, Eq)]
#[endian(be)]
#[wire_repr(packed)]
#[wire_derive(Clone, Copy, Debug, PartialEq, Eq)]
struct PackedTuple(u16, u32);
let wire: PackedTupleWire = PackedTuple(0x1122, 0x3344_5566).into();
let mut buf = Vec::new();
write_specific(&mut buf, &wire).unwrap();
assert_eq!(buf, vec![0x11, 0x22, 0x33, 0x44, 0x55, 0x66]);
}