kafka_wire_protocol/schema/describe_quorum_request/
v1.rs1use std::io::{Read, Result, Write};
4
5use serde::{Deserialize, Serialize};
6#[cfg(test)] use proptest_derive::Arbitrary;
7
8use crate::arrays::{read_array, write_array};
9use crate::markers::{ApiMessage, Request};
10use crate::readable_writable::{Readable, Writable};
11use crate::tagged_fields::{RawTaggedField, read_tagged_fields, write_tagged_fields};
12#[cfg(test)] use crate::test_utils::proptest_strategies;
13
14#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
16#[cfg_attr(test, derive(Arbitrary))]
17pub struct DescribeQuorumRequest {
18 #[cfg_attr(test, proptest(strategy = "proptest_strategies::vec()"))]
20 pub topics: Vec<TopicData>,
21 #[cfg_attr(test, proptest(strategy = "proptest_strategies::unknown_tagged_fields()"))]
23 pub _unknown_tagged_fields: Vec<RawTaggedField>,
24}
25
26impl ApiMessage for DescribeQuorumRequest {
27 fn api_key(&self) -> i16 {
28 55
29 }
30
31 fn version(&self) -> i16 {
32 1
33 }
34}
35
36impl Request for DescribeQuorumRequest { }
37
38impl Default for DescribeQuorumRequest {
39 fn default() -> Self {
40 DescribeQuorumRequest {
41 topics: Vec::<TopicData>::new(),
42 _unknown_tagged_fields: Vec::new(),
43 }
44 }
45}
46
47impl DescribeQuorumRequest {
48 pub fn new(topics: Vec<TopicData>) -> Self {
49 Self {
50 topics,
51 _unknown_tagged_fields: vec![],
52 }
53 }
54}
55
56#[cfg(test)]
57mod tests_describe_quorum_request_new_and_default {
58 use super::*;
59
60 #[test]
61 fn test() {
62 let d = DescribeQuorumRequest::new(
63 Vec::<TopicData>::new(),
64 );
65 assert_eq!(d, DescribeQuorumRequest::default());
66 }
67}
68
69impl Readable for DescribeQuorumRequest {
70 fn read(#[allow(unused)] input: &mut impl Read) -> Result<Self> {
71 let topics = read_array::<TopicData>(input, "topics", true)?;
72 let tagged_fields_callback = |tag: i32, _: &[u8]| {
73 match tag {
74 _ => Ok(false)
75 }
76 };
77 let _unknown_tagged_fields = read_tagged_fields(input, tagged_fields_callback)?;
78 Ok(DescribeQuorumRequest {
79 topics, _unknown_tagged_fields
80 })
81 }
82}
83
84impl Writable for DescribeQuorumRequest {
85 fn write(&self, #[allow(unused)] output: &mut impl Write) -> Result<()> {
86 write_array(output, "self.topics", &self.topics, true)?;
87 write_tagged_fields(output, &[], &self._unknown_tagged_fields)?;
88 Ok(())
89 }
90}
91
92#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
94#[cfg_attr(test, derive(Arbitrary))]
95pub struct TopicData {
96 #[cfg_attr(test, proptest(strategy = "proptest_strategies::string()"))]
98 pub topic_name: String,
99 #[cfg_attr(test, proptest(strategy = "proptest_strategies::vec()"))]
101 pub partitions: Vec<PartitionData>,
102 #[cfg_attr(test, proptest(strategy = "proptest_strategies::unknown_tagged_fields()"))]
104 pub _unknown_tagged_fields: Vec<RawTaggedField>,
105}
106
107impl Default for TopicData {
108 fn default() -> Self {
109 TopicData {
110 topic_name: String::from(""),
111 partitions: Vec::<PartitionData>::new(),
112 _unknown_tagged_fields: Vec::new(),
113 }
114 }
115}
116
117impl TopicData {
118 pub fn new<S1: AsRef<str>>(topic_name: S1, partitions: Vec<PartitionData>) -> Self {
119 Self {
120 topic_name: topic_name.as_ref().to_string(),
121 partitions,
122 _unknown_tagged_fields: vec![],
123 }
124 }
125}
126
127#[cfg(test)]
128mod tests_topic_data_new_and_default {
129 use super::*;
130
131 #[test]
132 fn test() {
133 let d = TopicData::new(
134 String::from(""),
135 Vec::<PartitionData>::new(),
136 );
137 assert_eq!(d, TopicData::default());
138 }
139}
140
141impl Readable for TopicData {
142 fn read(#[allow(unused)] input: &mut impl Read) -> Result<Self> {
143 let topic_name = String::read_ext(input, "topic_name", true)?;
144 let partitions = read_array::<PartitionData>(input, "partitions", true)?;
145 let tagged_fields_callback = |tag: i32, _: &[u8]| {
146 match tag {
147 _ => Ok(false)
148 }
149 };
150 let _unknown_tagged_fields = read_tagged_fields(input, tagged_fields_callback)?;
151 Ok(TopicData {
152 topic_name, partitions, _unknown_tagged_fields
153 })
154 }
155}
156
157impl Writable for TopicData {
158 fn write(&self, #[allow(unused)] output: &mut impl Write) -> Result<()> {
159 self.topic_name.write_ext(output, "self.topic_name", true)?;
160 write_array(output, "self.partitions", &self.partitions, true)?;
161 write_tagged_fields(output, &[], &self._unknown_tagged_fields)?;
162 Ok(())
163 }
164}
165
166#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
168#[cfg_attr(test, derive(Arbitrary))]
169pub struct PartitionData {
170 pub partition_index: i32,
172 #[cfg_attr(test, proptest(strategy = "proptest_strategies::unknown_tagged_fields()"))]
174 pub _unknown_tagged_fields: Vec<RawTaggedField>,
175}
176
177impl Default for PartitionData {
178 fn default() -> Self {
179 PartitionData {
180 partition_index: 0_i32,
181 _unknown_tagged_fields: Vec::new(),
182 }
183 }
184}
185
186impl PartitionData {
187 pub fn new(partition_index: i32) -> Self {
188 Self {
189 partition_index,
190 _unknown_tagged_fields: vec![],
191 }
192 }
193}
194
195#[cfg(test)]
196mod tests_partition_data_new_and_default {
197 use super::*;
198
199 #[test]
200 fn test() {
201 let d = PartitionData::new(
202 0_i32,
203 );
204 assert_eq!(d, PartitionData::default());
205 }
206}
207
208impl Readable for PartitionData {
209 fn read(#[allow(unused)] input: &mut impl Read) -> Result<Self> {
210 let partition_index = i32::read(input)?;
211 let tagged_fields_callback = |tag: i32, _: &[u8]| {
212 match tag {
213 _ => Ok(false)
214 }
215 };
216 let _unknown_tagged_fields = read_tagged_fields(input, tagged_fields_callback)?;
217 Ok(PartitionData {
218 partition_index, _unknown_tagged_fields
219 })
220 }
221}
222
223impl Writable for PartitionData {
224 fn write(&self, #[allow(unused)] output: &mut impl Write) -> Result<()> {
225 self.partition_index.write(output)?;
226 write_tagged_fields(output, &[], &self._unknown_tagged_fields)?;
227 Ok(())
228 }
229}
230
231#[cfg(test)]
232mod tests {
233 use super::*;
234 use proptest::prelude::*;
235
236 #[test]
237 fn test_java_default() {
238 crate::test_utils::test_java_default::<DescribeQuorumRequest>("DescribeQuorumRequest", 1);
239 }
240
241 proptest! {
242 #[test]
243 fn test_serde(data: DescribeQuorumRequest) {
244 crate::test_utils::test_serde(&data)?;
245 }
246 }
247
248 proptest! {
249 #[test]
250 fn test_java_arbitrary(data: DescribeQuorumRequest) {
251 crate::test_utils::test_java_arbitrary(&data, "DescribeQuorumRequest", 1);
252 }
253 }
254}