kafka_wire_protocol/schema/sync_group_request/
v3.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::bytes::{read_bytes, write_bytes};
10use crate::markers::{ApiMessage, Request};
11use crate::readable_writable::{Readable, Writable};
12#[cfg(test)] use crate::test_utils::{proptest_strategies, serde_bytes};
13
14#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
16#[cfg_attr(test, derive(Arbitrary))]
17pub struct SyncGroupRequest {
18 #[cfg_attr(test, proptest(strategy = "proptest_strategies::string()"))]
20 pub group_id: String,
21 pub generation_id: i32,
23 #[cfg_attr(test, proptest(strategy = "proptest_strategies::string()"))]
25 pub member_id: String,
26 #[cfg_attr(test, proptest(strategy = "proptest_strategies::optional_string()"))]
28 pub group_instance_id: Option<String>,
29 #[cfg_attr(test, proptest(strategy = "proptest_strategies::vec()"))]
31 pub assignments: Vec<SyncGroupRequestAssignment>,
32}
33
34impl ApiMessage for SyncGroupRequest {
35 fn api_key(&self) -> i16 {
36 14
37 }
38
39 fn version(&self) -> i16 {
40 3
41 }
42}
43
44impl Request for SyncGroupRequest { }
45
46impl Default for SyncGroupRequest {
47 fn default() -> Self {
48 SyncGroupRequest {
49 group_id: String::from(""),
50 generation_id: 0_i32,
51 member_id: String::from(""),
52 group_instance_id: None,
53 assignments: Vec::<SyncGroupRequestAssignment>::new(),
54 }
55 }
56}
57
58impl SyncGroupRequest {
59 pub fn new<S1: AsRef<str>, S2: AsRef<str>, S3: AsRef<str>>(group_id: S1, generation_id: i32, member_id: S2, group_instance_id: Option<S3>, assignments: Vec<SyncGroupRequestAssignment>) -> Self {
60 Self {
61 group_id: group_id.as_ref().to_string(),
62 generation_id,
63 member_id: member_id.as_ref().to_string(),
64 group_instance_id: group_instance_id.map(|s| s.as_ref().to_string()),
65 assignments,
66 }
67 }
68}
69
70#[cfg(test)]
71mod tests_sync_group_request_new_and_default {
72 use super::*;
73
74 #[test]
75 fn test() {
76 let d = SyncGroupRequest::new(
77 String::from(""),
78 0_i32,
79 String::from(""),
80 None::<String>,
81 Vec::<SyncGroupRequestAssignment>::new(),
82 );
83 assert_eq!(d, SyncGroupRequest::default());
84 }
85}
86
87impl Readable for SyncGroupRequest {
88 fn read(#[allow(unused)] input: &mut impl Read) -> Result<Self> {
89 let group_id = String::read_ext(input, "group_id", false)?;
90 let generation_id = i32::read(input)?;
91 let member_id = String::read_ext(input, "member_id", false)?;
92 let group_instance_id = Option::<String>::read_ext(input, "group_instance_id", false)?;
93 let assignments = read_array::<SyncGroupRequestAssignment>(input, "assignments", false)?;
94 Ok(SyncGroupRequest {
95 group_id, generation_id, member_id, group_instance_id, assignments
96 })
97 }
98}
99
100impl Writable for SyncGroupRequest {
101 fn write(&self, #[allow(unused)] output: &mut impl Write) -> Result<()> {
102 self.group_id.write_ext(output, "self.group_id", false)?;
103 self.generation_id.write(output)?;
104 self.member_id.write_ext(output, "self.member_id", false)?;
105 self.group_instance_id.write_ext(output, "self.group_instance_id", false)?;
106 write_array(output, "self.assignments", &self.assignments, false)?;
107 Ok(())
108 }
109}
110
111#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
113#[cfg_attr(test, derive(Arbitrary))]
114pub struct SyncGroupRequestAssignment {
115 #[cfg_attr(test, proptest(strategy = "proptest_strategies::string()"))]
117 pub member_id: String,
118 #[cfg_attr(test, proptest(strategy = "proptest_strategies::bytes()"))]
120 #[cfg_attr(test, serde(with="serde_bytes"))]
121 pub assignment: Vec<u8>,
122}
123
124impl Default for SyncGroupRequestAssignment {
125 fn default() -> Self {
126 SyncGroupRequestAssignment {
127 member_id: String::from(""),
128 assignment: Vec::new(),
129 }
130 }
131}
132
133impl SyncGroupRequestAssignment {
134 pub fn new<S1: AsRef<str>>(member_id: S1, assignment: Vec<u8>) -> Self {
135 Self {
136 member_id: member_id.as_ref().to_string(),
137 assignment,
138 }
139 }
140}
141
142#[cfg(test)]
143mod tests_sync_group_request_assignment_new_and_default {
144 use super::*;
145
146 #[test]
147 fn test() {
148 let d = SyncGroupRequestAssignment::new(
149 String::from(""),
150 Vec::new(),
151 );
152 assert_eq!(d, SyncGroupRequestAssignment::default());
153 }
154}
155
156impl Readable for SyncGroupRequestAssignment {
157 fn read(#[allow(unused)] input: &mut impl Read) -> Result<Self> {
158 let member_id = String::read_ext(input, "member_id", false)?;
159 let assignment = read_bytes(input, "assignment", false)?;
160 Ok(SyncGroupRequestAssignment {
161 member_id, assignment
162 })
163 }
164}
165
166impl Writable for SyncGroupRequestAssignment {
167 fn write(&self, #[allow(unused)] output: &mut impl Write) -> Result<()> {
168 self.member_id.write_ext(output, "self.member_id", false)?;
169 write_bytes(output, "self.assignment", &self.assignment, 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::<SyncGroupRequest>("SyncGroupRequest", 3);
182 }
183
184 proptest! {
185 #[test]
186 fn test_serde(data: SyncGroupRequest) {
187 crate::test_utils::test_serde(&data)?;
188 }
189 }
190
191 proptest! {
192 #[test]
193 fn test_java_arbitrary(data: SyncGroupRequest) {
194 crate::test_utils::test_java_arbitrary(&data, "SyncGroupRequest", 3);
195 }
196 }
197}