kafka_wire_protocol/schema/share_group_heartbeat_request/
v0.rs1use std::io::{Read, Result, Write};
4
5use serde::{Deserialize, Serialize};
6#[cfg(test)] use proptest_derive::Arbitrary;
7
8use crate::arrays::{read_nullable_array, write_nullable_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 ShareGroupHeartbeatRequest {
18 #[cfg_attr(test, proptest(strategy = "proptest_strategies::string()"))]
20 pub group_id: String,
21 #[cfg_attr(test, proptest(strategy = "proptest_strategies::string()"))]
23 pub member_id: String,
24 pub member_epoch: i32,
26 #[cfg_attr(test, proptest(strategy = "proptest_strategies::optional_string()"))]
28 pub rack_id: Option<String>,
29 #[cfg_attr(test, proptest(strategy = "proptest_strategies::optional_vec()"))]
31 pub subscribed_topic_names: Option<Vec<String>>,
32 #[cfg_attr(test, proptest(strategy = "proptest_strategies::unknown_tagged_fields()"))]
34 pub _unknown_tagged_fields: Vec<RawTaggedField>,
35}
36
37impl ApiMessage for ShareGroupHeartbeatRequest {
38 fn api_key(&self) -> i16 {
39 76
40 }
41
42 fn version(&self) -> i16 {
43 0
44 }
45}
46
47impl Request for ShareGroupHeartbeatRequest { }
48
49impl Default for ShareGroupHeartbeatRequest {
50 fn default() -> Self {
51 ShareGroupHeartbeatRequest {
52 group_id: String::from(""),
53 member_id: String::from(""),
54 member_epoch: 0_i32,
55 rack_id: None,
56 subscribed_topic_names: None,
57 _unknown_tagged_fields: Vec::new(),
58 }
59 }
60}
61
62impl ShareGroupHeartbeatRequest {
63 pub fn new<S1: AsRef<str>, S2: AsRef<str>, S3: AsRef<str>>(group_id: S1, member_id: S2, member_epoch: i32, rack_id: Option<S3>, subscribed_topic_names: Option<Vec<String>>) -> Self {
64 Self {
65 group_id: group_id.as_ref().to_string(),
66 member_id: member_id.as_ref().to_string(),
67 member_epoch,
68 rack_id: rack_id.map(|s| s.as_ref().to_string()),
69 subscribed_topic_names,
70 _unknown_tagged_fields: vec![],
71 }
72 }
73}
74
75#[cfg(test)]
76mod tests_share_group_heartbeat_request_new_and_default {
77 use super::*;
78
79 #[test]
80 fn test() {
81 let d = ShareGroupHeartbeatRequest::new(
82 String::from(""),
83 String::from(""),
84 0_i32,
85 None::<String>,
86 None::<Vec::<String>>,
87 );
88 assert_eq!(d, ShareGroupHeartbeatRequest::default());
89 }
90}
91
92impl Readable for ShareGroupHeartbeatRequest {
93 fn read(#[allow(unused)] input: &mut impl Read) -> Result<Self> {
94 let group_id = String::read_ext(input, "group_id", true)?;
95 let member_id = String::read_ext(input, "member_id", true)?;
96 let member_epoch = i32::read(input)?;
97 let rack_id = Option::<String>::read_ext(input, "rack_id", true)?;
98 let subscribed_topic_names = read_nullable_array::<String>(input, "subscribed_topic_names", true)?;
99 let tagged_fields_callback = |tag: i32, _: &[u8]| {
100 match tag {
101 _ => Ok(false)
102 }
103 };
104 let _unknown_tagged_fields = read_tagged_fields(input, tagged_fields_callback)?;
105 Ok(ShareGroupHeartbeatRequest {
106 group_id, member_id, member_epoch, rack_id, subscribed_topic_names, _unknown_tagged_fields
107 })
108 }
109}
110
111impl Writable for ShareGroupHeartbeatRequest {
112 fn write(&self, #[allow(unused)] output: &mut impl Write) -> Result<()> {
113 self.group_id.write_ext(output, "self.group_id", true)?;
114 self.member_id.write_ext(output, "self.member_id", true)?;
115 self.member_epoch.write(output)?;
116 self.rack_id.write_ext(output, "self.rack_id", true)?;
117 write_nullable_array(output, "self.subscribed_topic_names", self.subscribed_topic_names.as_deref(), true)?;
118 write_tagged_fields(output, &[], &self._unknown_tagged_fields)?;
119 Ok(())
120 }
121}
122
123#[cfg(test)]
124mod tests {
125 use super::*;
126 use proptest::prelude::*;
127
128 #[test]
129 fn test_java_default() {
130 crate::test_utils::test_java_default::<ShareGroupHeartbeatRequest>("ShareGroupHeartbeatRequest", 0);
131 }
132
133 proptest! {
134 #[test]
135 fn test_serde(data: ShareGroupHeartbeatRequest) {
136 crate::test_utils::test_serde(&data)?;
137 }
138 }
139
140 proptest! {
141 #[test]
142 fn test_java_arbitrary(data: ShareGroupHeartbeatRequest) {
143 crate::test_utils::test_java_arbitrary(&data, "ShareGroupHeartbeatRequest", 0);
144 }
145 }
146}