Currently these structures expose potentially invalid (uninitialized) data. This should be avoided in Rust. I'd suggest to make data and dlc fields private and provide data() method returning slice. Further, provide push_byte() and push_slice() methods for appending bytes.
Also data should probably use MaybeUninit<u8> instead of u8, but only after MaybeUninit is stabilized.