kafka_wire_protocol/schema/consumer_protocol_subscription/
v3.rs

1// This file was generated. Do not edit.
2
3use 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::bytes::{read_nullable_bytes, write_nullable_bytes};
10use crate::markers::{ApiMessage, Data};
11use crate::readable_writable::{Readable, Writable};
12#[cfg(test)] use crate::test_utils::{proptest_strategies, serde_option_bytes};
13
14/// ConsumerProtocolSubscription, version 3.
15#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
16#[cfg_attr(test, derive(Arbitrary))]
17pub struct ConsumerProtocolSubscription {
18    /// The topics that the member wants to consume.
19    #[cfg_attr(test, proptest(strategy = "proptest_strategies::vec()"))]
20    pub topics: Vec<String>,
21    /// User data that will be passed back to the consumer.
22    #[cfg_attr(test, proptest(strategy = "proptest_strategies::optional_bytes()"))]
23    #[cfg_attr(test, serde(with="serde_option_bytes"))]
24    pub user_data: Option<Vec<u8>>,
25    /// The partitions that the member owns.
26    #[cfg_attr(test, proptest(strategy = "proptest_strategies::vec()"))]
27    pub owned_partitions: Vec<TopicPartition>,
28    /// The generation id of the member.
29    pub generation_id: i32,
30    /// The rack id of the member.
31    #[cfg_attr(test, proptest(strategy = "proptest_strategies::optional_string()"))]
32    pub rack_id: Option<String>,
33}
34
35impl ApiMessage for ConsumerProtocolSubscription {
36    fn api_key(&self) -> i16 {
37        -1
38    }
39    
40    fn version(&self) -> i16 {
41        3
42    }
43}
44
45impl Data for ConsumerProtocolSubscription { }
46
47impl Default for ConsumerProtocolSubscription {
48    fn default() -> Self {
49        ConsumerProtocolSubscription {
50            topics: Vec::<String>::new(),
51            user_data: None,
52            owned_partitions: Vec::<TopicPartition>::new(),
53            generation_id: -1_i32,
54            rack_id: None,
55        }
56    }
57}
58
59impl ConsumerProtocolSubscription {
60    pub fn new<S1: AsRef<str>>(topics: Vec<String>, user_data: Option<Vec<u8>>, owned_partitions: Vec<TopicPartition>, generation_id: i32, rack_id: Option<S1>) -> Self {
61        Self {
62            topics,
63            user_data,
64            owned_partitions,
65            generation_id,
66            rack_id: rack_id.map(|s| s.as_ref().to_string()),
67        }
68    }
69}
70
71#[cfg(test)]
72mod tests_consumer_protocol_subscription_new_and_default {
73    use super::*;
74    
75    #[test]
76    fn test() {
77        let d = ConsumerProtocolSubscription::new(
78            Vec::<String>::new(),
79            None::<Vec::<u8>>,
80            Vec::<TopicPartition>::new(),
81            -1_i32,
82            None::<String>,
83        );
84        assert_eq!(d, ConsumerProtocolSubscription::default());
85    }
86}
87
88impl Readable for ConsumerProtocolSubscription {
89    fn read(#[allow(unused)] input: &mut impl Read) -> Result<Self> {
90        let topics = read_array::<String>(input, "topics", false)?;
91        let user_data = read_nullable_bytes(input, "user_data", false)?;
92        let owned_partitions = read_array::<TopicPartition>(input, "owned_partitions", false)?;
93        let generation_id = i32::read(input)?;
94        let rack_id = Option::<String>::read_ext(input, "rack_id", false)?;
95        Ok(ConsumerProtocolSubscription {
96            topics, user_data, owned_partitions, generation_id, rack_id
97        })
98    }
99}
100
101impl Writable for ConsumerProtocolSubscription {
102    fn write(&self, #[allow(unused)] output: &mut impl Write) -> Result<()> {
103        write_array(output, "self.topics", &self.topics, false)?;
104        write_nullable_bytes(output, "self.user_data", self.user_data.as_deref(), false)?;
105        write_array(output, "self.owned_partitions", &self.owned_partitions, false)?;
106        self.generation_id.write(output)?;
107        self.rack_id.write_ext(output, "self.rack_id", false)?;
108        Ok(())
109    }
110}
111
112/// TopicPartition, version 3.
113#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
114#[cfg_attr(test, derive(Arbitrary))]
115pub struct TopicPartition {
116    /// The topic name.
117    #[cfg_attr(test, proptest(strategy = "proptest_strategies::string()"))]
118    pub topic: String,
119    /// The partition ids.
120    #[cfg_attr(test, proptest(strategy = "proptest_strategies::vec()"))]
121    pub partitions: Vec<i32>,
122}
123
124impl Default for TopicPartition {
125    fn default() -> Self {
126        TopicPartition {
127            topic: String::from(""),
128            partitions: Vec::<i32>::new(),
129        }
130    }
131}
132
133impl TopicPartition {
134    pub fn new<S1: AsRef<str>>(topic: S1, partitions: Vec<i32>) -> Self {
135        Self {
136            topic: topic.as_ref().to_string(),
137            partitions,
138        }
139    }
140}
141
142#[cfg(test)]
143mod tests_topic_partition_new_and_default {
144    use super::*;
145    
146    #[test]
147    fn test() {
148        let d = TopicPartition::new(
149            String::from(""),
150            Vec::<i32>::new(),
151        );
152        assert_eq!(d, TopicPartition::default());
153    }
154}
155
156impl Readable for TopicPartition {
157    fn read(#[allow(unused)] input: &mut impl Read) -> Result<Self> {
158        let topic = String::read_ext(input, "topic", false)?;
159        let partitions = read_array::<i32>(input, "partitions", false)?;
160        Ok(TopicPartition {
161            topic, partitions
162        })
163    }
164}
165
166impl Writable for TopicPartition {
167    fn write(&self, #[allow(unused)] output: &mut impl Write) -> Result<()> {
168        self.topic.write_ext(output, "self.topic", false)?;
169        write_array(output, "self.partitions", &self.partitions, false)?;
170        Ok(())
171    }
172}
173
174#[cfg(test)]
175mod tests {
176    use super::*;
177    use proptest::prelude::*;
178    
179    #[test]
180    fn test_java_default() {
181        crate::test_utils::test_java_default::<ConsumerProtocolSubscription>("ConsumerProtocolSubscription", 3);
182    }
183    
184    proptest! {
185        #[test]
186        fn test_serde(data: ConsumerProtocolSubscription) {
187            crate::test_utils::test_serde(&data)?;
188        }
189    }
190    
191    proptest! {
192        #[test]
193        fn test_java_arbitrary(data: ConsumerProtocolSubscription) {
194            crate::test_utils::test_java_arbitrary(&data, "ConsumerProtocolSubscription", 3);
195        }
196    }
197}