kafrust-protocol 0.3.6

Kafka wire protocol primitives for kafrust.
Documentation
use kafrust_protocol::api::api_versions::{ApiVersionsResponseV0, ApiVersionsResponseV3};
use kafrust_protocol::api::fetch::FetchResponseV4;
use kafrust_protocol::api::list_offsets::ListOffsetsResponseV1;
use kafrust_protocol::api::metadata::{MetadataResponseV1, MetadataResponseV12};
use kafrust_protocol::api::offset_for_leader_epoch::OffsetForLeaderEpochResponseV3;
use kafrust_protocol::api::produce::{ProduceResponseV2, ProduceResponseV9};
use kafrust_protocol::codec::Decoder;

#[test]
fn rejects_truncated_data_plane_response_families() {
    assert!(ProduceResponseV2::decode_body(&mut Decoder::new(&[0, 0, 0])).is_err());
    assert!(FetchResponseV4::decode_body(&mut Decoder::new(&[0, 0, 0])).is_err());
    assert!(ListOffsetsResponseV1::decode_body(&mut Decoder::new(&[0, 0, 0])).is_err());
    assert!(MetadataResponseV1::decode_body(&mut Decoder::new(&[0, 0, 0])).is_err());
    assert!(ApiVersionsResponseV0::decode_body(&mut Decoder::new(&[0, 0, 0])).is_err());
    assert!(OffsetForLeaderEpochResponseV3::decode_body(&mut Decoder::new(&[0, 0, 0])).is_err());
}

#[test]
fn rejects_negative_or_truncated_collection_lengths() {
    let negative_array = [(-2_i32).to_be_bytes(), 0_i32.to_be_bytes()]
        .into_iter()
        .flatten()
        .collect::<Vec<_>>();
    assert!(ProduceResponseV2::decode_body(&mut Decoder::new(&negative_array)).is_err());
    let negative_fetch_array = [0_i32.to_be_bytes(), (-2_i32).to_be_bytes()]
        .into_iter()
        .flatten()
        .collect::<Vec<_>>();
    assert!(FetchResponseV4::decode_body(&mut Decoder::new(&negative_fetch_array)).is_err());
    assert!(ListOffsetsResponseV1::decode_body(&mut Decoder::new(&negative_array)).is_err());

    let truncated_flexible = [1_u8, 0, 0, 0];
    assert!(MetadataResponseV12::decode_body(&mut Decoder::new(&truncated_flexible)).is_err());
    assert!(ApiVersionsResponseV3::decode_body(&mut Decoder::new(&truncated_flexible)).is_err());
    assert!(ProduceResponseV9::decode_body(&mut Decoder::new(&truncated_flexible)).is_err());
}