/// A hard decode failure.
///
/// Most anomalies encountered while decoding — bad checksum, reserved fields set,
/// unrecognised enum values — are reported as warnings on the returned frame rather
/// than errors. `DecodeError` is returned only when the packet cannot be decoded at
/// all.
///
/// The only current variant is [`DecodeError::Truncated`], which fires when the
/// `length` field in the packet header claims more payload bytes than the 31-byte
/// packet can hold (i.e. `length > 27`).