kafrust 0.2.4

A pure Rust Kafka client with no librdkafka or C toolchain dependency.
Documentation
mod common;

use kafrust::{ConsumerConfig, Error};

#[tokio::main]
async fn main() -> kafrust::Result<()> {
    let bootstrap_servers = common::bootstrap_servers_from_env();
    let topic = std::env::var("KAFRUST_TOPIC").unwrap_or_else(|_| "kafrust-smoke".to_owned());
    let partition = std::env::var("KAFRUST_PARTITION")
        .ok()
        .and_then(|value| value.parse::<i32>().ok())
        .unwrap_or(0);
    let offset = std::env::var("KAFRUST_OFFSET")
        .ok()
        .and_then(|value| value.parse::<i64>().ok())
        .unwrap_or(0);

    let mut consumer = common::apply_security(
        ConsumerConfig::new(bootstrap_servers).client_id("kafrust-consumer-example"),
    )?
    .build()
    .await?;

    let watermarks = consumer.fetch_watermarks(&topic, partition).await?;
    if watermarks.high() < watermarks.low() {
        return Err(Error::Unsupported(
            "partition high watermark is below its low watermark",
        ));
    }
    println!(
        "watermarks {}-{} low={} high={}",
        topic,
        partition,
        watermarks.low(),
        watermarks.high()
    );

    consumer.assign(topic, partition, offset);
    let records = consumer.poll().await?;
    for record in records {
        println!(
            "fetched {}-{}@{} key={:?} value={:?}",
            record.topic(),
            record.partition(),
            record.offset(),
            record.key().map(String::from_utf8_lossy),
            record.value().map(String::from_utf8_lossy)
        );
    }

    Ok(())
}