kf-protocol 2.0.3

Native Rust implementation of kafka protocol
Documentation
use std::io::Cursor;

use kf_protocol::derive::Decode;
use kf_protocol::derive::Encode;
use kf_protocol::Decoder;
use kf_protocol::Encoder;
    

#[derive(Encode,Decode,Default,Debug)]
struct TestRecord {
    value: i8,
    #[fluvio_kf(min_version = 1,max_version = 1)]
    value2: i8,
    #[fluvio_kf(min_version = 1)]
    value3: i8
}
 

#[test]
fn test_encode_version() {

    flv_util::init_logger();
    let mut record = TestRecord::default();
    record.value2 = 10;
    record.value3 = 5;

    // version 0 should only encode value
    let mut dest = vec![];
    record.encode(&mut dest,0).expect("encode");
    assert_eq!(dest.len(),1);
    assert_eq!(record.write_size(0),1);

    
    // version 1 should encode value1,value2,value3
    let mut dest = vec![];
    record.encode(&mut dest,1).expect("encode");
    assert_eq!(dest.len(),3);
    assert_eq!(record.write_size(1),3);

    // version 3 should only encode value, value3
    let mut dest = vec![];
    record.encode(&mut dest,2).expect("encode");
    assert_eq!(dest.len(),2);
    assert_eq!(dest[1],5);  
    assert_eq!(record.write_size(2),2);
    
}


#[test]
fn test_decode_version() {

    // version 0 record
    let data = [0x08];
    let record = TestRecord::decode_from(&mut Cursor::new(&data),0).expect("decode");
    assert_eq!(record.value,8);
    assert_eq!(record.value2,0);    // default

    let data = [0x08];
    assert!(TestRecord::decode_from(&mut Cursor::new(&data),1).is_err(),"version 1 needs 3 bytes"); 

    let data = [0x08,0x01,0x05];
    let record = TestRecord::decode_from(&mut Cursor::new(&data),1).expect("decode");
    assert_eq!(record.value,8);
    assert_eq!(record.value2,1);    
    assert_eq!(record.value3,5);   

    let data = [0x08,0x01,0x05];
    let record = TestRecord::decode_from(&mut Cursor::new(&data),3).expect("decode");
    assert_eq!(record.value,8);
    assert_eq!(record.value2,0);   
    assert_eq!(record.value3,1);    // default, didn't consume

}