kafkaesque 0.0.15

Kafka implementations in Rust (Unofficial)
Documentation
use crate::formats::api_keys::ApiKey;
use crate::formats::codec::{Read, Write};
use crate::formats::request::{ApiVersion, RequestMessage};
use crate::formats::ErrorCode;

#[derive(Debug, Write, RequestMessage)]
#[request_message(version = 0, key = "ApiVersions")]
pub struct ApiVersionsReq;

#[derive(Debug, Read)]
pub struct ApiVersionsResp {
    pub error_code: ErrorCode,
    pub api_keys: Vec<ApiKeyVersionsReqV0Version>,
}

#[derive(Debug, Read)]
pub struct ApiKeyVersionsReqV0Version {
    pub api_key: ApiKey,
    pub min_version: i16,
    pub max_version: i16,
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::{clients::BrokerConnection, formats::error_code::ErrorCode};

    #[tokio::test]
    async fn test_api_versions() {
        let mut conn = BrokerConnection::connect("test-client", "localhost:9092")
            .await
            .unwrap();
        let resp: ApiVersionsResp = conn.send(ApiVersionsReq).await.unwrap();
        assert_eq!(resp.error_code, ErrorCode::None);
        assert!(!resp.api_keys.is_empty())
    }
}