kafka_api/schemata/
join_group_response.rs1use byteorder::WriteBytesExt;
16
17use crate::codec::*;
18use crate::IoResult;
19
20#[derive(Debug, Default, Clone)]
40pub struct JoinGroupResponse {
41 pub throttle_time_ms: i32,
44 pub error_code: i16,
46 pub generation_id: i32,
48 pub protocol_type: Option<String>,
50 pub protocol_name: Option<String>,
52 pub leader: String,
54 pub skip_assignment: bool,
56 pub member_id: String,
58 pub members: Vec<JoinGroupResponseMember>,
59 pub unknown_tagged_fields: Vec<RawTaggedField>,
61}
62
63impl Encodable for JoinGroupResponse {
64 fn write<B: WriteBytesExt>(&self, buf: &mut B, version: i16) -> IoResult<()> {
65 if version >= 2 {
66 Int32.encode(buf, self.throttle_time_ms)?;
67 }
68 Int16.encode(buf, self.error_code)?;
69 Int32.encode(buf, self.generation_id)?;
70 if version >= 7 {
71 NullableString(true).encode(buf, self.protocol_type.as_deref())?;
72 }
73 if version < 7 && self.protocol_name.is_none() {
74 Err(err_encode_message_null("protocol_name"))?
75 }
76 NullableString(version >= 6).encode(buf, self.protocol_name.as_deref())?;
77 NullableString(version >= 6).encode(buf, self.leader.as_str())?;
78 if version >= 9 {
79 Bool.encode(buf, self.skip_assignment)?;
80 }
81 NullableString(version >= 6).encode(buf, self.member_id.as_str())?;
82 NullableArray(Struct(version), version >= 6).encode(buf, self.members.as_slice())?;
83 if version >= 6 {
84 RawTaggedFieldList.encode(buf, &self.unknown_tagged_fields)?;
85 }
86 Ok(())
87 }
88
89 fn calculate_size(&self, version: i16) -> usize {
90 let mut res = 0;
91 if version >= 2 {
92 res += Int32::SIZE; }
94 res += Int16::SIZE; res += Int32::SIZE; if version >= 7 {
97 res += NullableString(true).calculate_size(self.protocol_type.as_deref());
98 }
99 res += NullableString(version >= 6).calculate_size(self.protocol_name.as_deref());
100 res += NullableString(version >= 6).calculate_size(self.leader.as_str());
101 if version >= 9 {
102 res += Bool::SIZE; }
104 res += NullableString(version >= 6).calculate_size(self.member_id.as_str());
105 res += NullableArray(Struct(version), version >= 6).calculate_size(self.members.as_slice());
106 if version >= 6 {
107 res += RawTaggedFieldList.calculate_size(&self.unknown_tagged_fields);
108 }
109 res
110 }
111}
112
113#[derive(Debug, Default, Clone)]
114pub struct JoinGroupResponseMember {
115 pub member_id: String,
117 pub group_instance_id: Option<String>,
119 pub metadata: Vec<u8>,
121 pub unknown_tagged_fields: Vec<RawTaggedField>,
123}
124
125impl Encodable for JoinGroupResponseMember {
126 fn write<B: WriteBytesExt>(&self, buf: &mut B, version: i16) -> IoResult<()> {
127 NullableString(version >= 6).encode(buf, self.member_id.as_str())?;
128 if version >= 5 {
129 NullableString(version >= 6).encode(buf, self.group_instance_id.as_deref())?;
130 }
131 NullableBytes(version >= 6).encode(buf, &self.metadata)?;
132 if version >= 6 {
133 RawTaggedFieldList.encode(buf, &self.unknown_tagged_fields)?;
134 }
135 Ok(())
136 }
137
138 fn calculate_size(&self, version: i16) -> usize {
139 let mut res = 0;
140 res += NullableString(version >= 6).calculate_size(self.member_id.as_str());
141 if version >= 5 {
142 res += NullableString(version >= 6).calculate_size(self.group_instance_id.as_deref());
143 }
144 res += NullableBytes(version >= 6).calculate_size(&self.metadata);
145 if version >= 6 {
146 res += RawTaggedFieldList.calculate_size(&self.unknown_tagged_fields);
147 }
148 res
149 }
150}