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
use std::fmt::Debug;
use std::marker::PhantomData;
use kf_protocol::Decoder;
use kf_protocol::Encoder;
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;
#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct KfProduceRequest<R>
where
R: Encoder + Decoder + Default + Debug,
{
#[fluvio_kf(min_version = 3)]
pub transactional_id: Option<String>,
pub acks: i16,
pub timeout_ms: i32,
pub topics: Vec<TopicProduceData<R>>,
pub data: PhantomData<R>,
}
#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct TopicProduceData<R>
where
R: Encoder + Decoder + Default + Debug,
{
pub name: String,
pub partitions: Vec<PartitionProduceData<R>>,
pub data: PhantomData<R>,
}
#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct PartitionProduceData<R>
where
R: Encoder + Decoder + Default + Debug,
{
pub partition_index: i32,
pub records: R,
}
#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct KfProduceResponse {
pub responses: Vec<TopicProduceResponse>,
#[fluvio_kf(min_version = 1, ignorable)]
pub throttle_time_ms: i32,
}
#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct TopicProduceResponse {
pub name: String,
pub partitions: Vec<PartitionProduceResponse>,
}
#[derive(Encode, Decode, Serialize, Deserialize, KfDefault, Debug)]
pub struct PartitionProduceResponse {
pub partition_index: i32,
pub error_code: ErrorCode,
pub base_offset: i64,
#[fluvio_kf(min_version = 2, ignorable)]
pub log_append_time_ms: i64,
#[fluvio_kf(min_version = 5, ignorable)]
pub log_start_offset: i64,
}
impl<R> Request for KfProduceRequest<R>
where
R: Debug + Decoder + Encoder,
{
const API_KEY: u16 = 0;
const MIN_API_VERSION: i16 = 0;
const MAX_API_VERSION: i16 = 7;
const DEFAULT_API_VERSION: i16 = 7;
type Response = KfProduceResponse;
}