1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/// WARNING: CODE GENERATED FILE
/// * This file is generated by kfspec2code.
/// * Any changes applied to this file will be lost when a new spec is generated.
use serde::{Deserialize, Serialize};

use kf_protocol_api::ErrorCode;
use kf_protocol_api::Request;

use kf_protocol_derive::Decode;
use kf_protocol_derive::Encode;
use kf_protocol_derive::KfDefault;
use flv_util::socket_helpers::ServerAddress;
// -----------------------------------
// KfMetadataRequest
// -----------------------------------

#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct KfMetadataRequest {
    /// The topics to fetch metadata for.
    pub topics: Option<Vec<MetadataRequestTopic>>,

    /// If this is true, the broker may auto-create topics that we requested which do not already
    /// exist, if it is configured to do so.
    #[fluvio_kf(min_version = 4)]
    pub allow_auto_topic_creation: bool,
}

#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct MetadataRequestTopic {
    /// The topic name.
    pub name: String,
}

// -----------------------------------
// KfMetadataResponse
// -----------------------------------

#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct KfMetadataResponse {
    /// The duration in milliseconds for which the request was throttled due to a quota violation,
    /// or zero if the request did not violate any quota.
    #[fluvio_kf(min_version = 3)]
    pub throttle_time_ms: i32,

    /// Each broker in the response.
    pub brokers: Vec<MetadataResponseBroker>,

    /// The cluster ID that responding broker belongs to.
    #[fluvio_kf(min_version = 2, ignorable)]
    pub cluster_id: Option<String>,

    /// The ID of the controller broker.
    #[fluvio_kf(min_version = 1, ignorable)]
    pub controller_id: i32,

    /// Each topic in the response.
    pub topics: Vec<MetadataResponseTopic>,
}

#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct MetadataResponseBroker {
    /// The broker ID.
    pub node_id: i32,

    /// The broker hostname.
    pub host: String,

    /// The broker port.
    pub port: i32,

    /// The rack of the broker, or null if it has not been assigned to a rack.
    #[fluvio_kf(min_version = 1, ignorable)]
    pub rack: Option<String>,
}

impl MetadataResponseBroker {
    pub fn into(&self) -> ServerAddress {
        ServerAddress::new(self.host.clone(),self.port as u16)
    }
}

#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct MetadataResponseTopic {
    /// The topic error, or 0 if there was no error.
    pub error_code: ErrorCode,

    /// The topic name.
    pub name: String,

    /// True if the topic is internal.
    #[fluvio_kf(min_version = 1, ignorable)]
    pub is_internal: bool,

    /// Each partition in the topic.
    pub partitions: Vec<MetadataResponsePartition>,
}

#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct MetadataResponsePartition {
    /// The partition error, or 0 if there was no error.
    pub error_code: ErrorCode,

    /// The partition index.
    pub partition_index: i32,

    /// The ID of the leader broker.
    pub leader_id: i32,

    /// The leader epoch of this partition.
    #[fluvio_kf(min_version = 7, ignorable)]
    pub leader_epoch: i32,

    /// The set of all nodes that host this partition.
    pub replica_nodes: Vec<i32>,

    /// The set of nodes that are in sync with the leader for this partition.
    pub isr_nodes: Vec<i32>,

    /// The set of offline replicas of this partition.
    #[fluvio_kf(min_version = 5, ignorable)]
    pub offline_replicas: Vec<i32>,
}

// -----------------------------------
// Implementation - KfMetadataRequest
// -----------------------------------

impl Request for KfMetadataRequest {
    const API_KEY: u16 = 3;

    const MIN_API_VERSION: i16 = 0;
    const MAX_API_VERSION: i16 = 7;
    const DEFAULT_API_VERSION: i16 = 7;

    type Response = KfMetadataResponse;
}