kafka-serde

Crates.iokafka-serde
lib.rskafka-serde
version0.1.0
sourcesrc
created_at2021-02-12 12:44:26.117755
updated_at2021-02-12 12:44:26.117755
descriptionserialization and deserialization for the Kafka protocol
homepagehttps://github.com/DataDog/kafka-serde
repositoryhttps://github.com/DataDog/kafka-serde
max_upload_size
id354176
size54,730
Glauber Costa (glommer)

documentation

README

kafka-serde

Rust's serde implementation for the Kafka protocol.

This allows you to serialize and deserialize kafka payloads. It can be used as a building block for a native-rust kafka client.

Usage

Serializing the kafka request header:

use serde::Serialize;
use std::io::{Write, Cursor};

#[derive(Serialize, Debug)]
struct RequestHeader {
    api_key: i16,
    api_version: i16,
    correlation_id: i32,
    client_id: &'static str,
}

let req = RequestHeader {
    api_key: 0,
    api_version: 0,
    correlation_id: 1,
    client_id: ""
};

let mut x = Cursor::new(Vec::<u8>::new());
kafka_serde::to_writer(x, &req).unwrap();

Deserializing the kafka response header:

use serde::Serialize;

#[derive(Deserialize, Default, Debug, Clone)]
struct ResponseHeader {
    pub correlation: i32,
}

let data : Vec<u8> = [0x0, 0x0, 0x0, 0x1];
let resp: ResponseHeader = kafka_serde::from_bytes(&data).unwrap();

Support

All Kafka protocol types are listed here

  • The fixed-size types are supported and map to their native rust types (int8 -> i8, etc).
  • Strings can be deserialized to both String and &str, and similarly for bytes
  • UUID is not supported (yet)
  • variable-size types like VARLONG and COMPACT_STRING are not supported (yet)
Commit count: 8

cargo fmt