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
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;
#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct KfMetadataRequest {
pub topics: Option<Vec<MetadataRequestTopic>>,
#[fluvio_kf(min_version = 4)]
pub allow_auto_topic_creation: bool,
}
#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct MetadataRequestTopic {
pub name: String,
}
#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct KfMetadataResponse {
#[fluvio_kf(min_version = 3)]
pub throttle_time_ms: i32,
pub brokers: Vec<MetadataResponseBroker>,
#[fluvio_kf(min_version = 2, ignorable)]
pub cluster_id: Option<String>,
#[fluvio_kf(min_version = 1, ignorable)]
pub controller_id: i32,
pub topics: Vec<MetadataResponseTopic>,
}
#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct MetadataResponseBroker {
pub node_id: i32,
pub host: String,
pub port: i32,
#[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 {
pub error_code: ErrorCode,
pub name: String,
#[fluvio_kf(min_version = 1, ignorable)]
pub is_internal: bool,
pub partitions: Vec<MetadataResponsePartition>,
}
#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct MetadataResponsePartition {
pub error_code: ErrorCode,
pub partition_index: i32,
pub leader_id: i32,
#[fluvio_kf(min_version = 7, ignorable)]
pub leader_epoch: i32,
pub replica_nodes: Vec<i32>,
pub isr_nodes: Vec<i32>,
#[fluvio_kf(min_version = 5, ignorable)]
pub offline_replicas: Vec<i32>,
}
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;
}