kafka_wire_protocol/schema/heartbeat_request/
v4.rs1use std::io::{Read, Result, Write};
4
5use serde::{Deserialize, Serialize};
6#[cfg(test)] use proptest_derive::Arbitrary;
7
8use crate::markers::{ApiMessage, Request};
9use crate::readable_writable::{Readable, Writable};
10use crate::tagged_fields::{RawTaggedField, read_tagged_fields, write_tagged_fields};
11#[cfg(test)] use crate::test_utils::proptest_strategies;
12
13#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
15#[cfg_attr(test, derive(Arbitrary))]
16pub struct HeartbeatRequest {
17 #[cfg_attr(test, proptest(strategy = "proptest_strategies::string()"))]
19 pub group_id: String,
20 pub generation_id: i32,
22 #[cfg_attr(test, proptest(strategy = "proptest_strategies::string()"))]
24 pub member_id: String,
25 #[cfg_attr(test, proptest(strategy = "proptest_strategies::optional_string()"))]
27 pub group_instance_id: Option<String>,
28 #[cfg_attr(test, proptest(strategy = "proptest_strategies::unknown_tagged_fields()"))]
30 pub _unknown_tagged_fields: Vec<RawTaggedField>,
31}
32
33impl ApiMessage for HeartbeatRequest {
34 fn api_key(&self) -> i16 {
35 12
36 }
37
38 fn version(&self) -> i16 {
39 4
40 }
41}
42
43impl Request for HeartbeatRequest { }
44
45impl Default for HeartbeatRequest {
46 fn default() -> Self {
47 HeartbeatRequest {
48 group_id: String::from(""),
49 generation_id: 0_i32,
50 member_id: String::from(""),
51 group_instance_id: None,
52 _unknown_tagged_fields: Vec::new(),
53 }
54 }
55}
56
57impl HeartbeatRequest {
58 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>) -> Self {
59 Self {
60 group_id: group_id.as_ref().to_string(),
61 generation_id,
62 member_id: member_id.as_ref().to_string(),
63 group_instance_id: group_instance_id.map(|s| s.as_ref().to_string()),
64 _unknown_tagged_fields: vec![],
65 }
66 }
67}
68
69#[cfg(test)]
70mod tests_heartbeat_request_new_and_default {
71 use super::*;
72
73 #[test]
74 fn test() {
75 let d = HeartbeatRequest::new(
76 String::from(""),
77 0_i32,
78 String::from(""),
79 None::<String>,
80 );
81 assert_eq!(d, HeartbeatRequest::default());
82 }
83}
84
85impl Readable for HeartbeatRequest {
86 fn read(#[allow(unused)] input: &mut impl Read) -> Result<Self> {
87 let group_id = String::read_ext(input, "group_id", true)?;
88 let generation_id = i32::read(input)?;
89 let member_id = String::read_ext(input, "member_id", true)?;
90 let group_instance_id = Option::<String>::read_ext(input, "group_instance_id", true)?;
91 let tagged_fields_callback = |tag: i32, _: &[u8]| {
92 match tag {
93 _ => Ok(false)
94 }
95 };
96 let _unknown_tagged_fields = read_tagged_fields(input, tagged_fields_callback)?;
97 Ok(HeartbeatRequest {
98 group_id, generation_id, member_id, group_instance_id, _unknown_tagged_fields
99 })
100 }
101}
102
103impl Writable for HeartbeatRequest {
104 fn write(&self, #[allow(unused)] output: &mut impl Write) -> Result<()> {
105 self.group_id.write_ext(output, "self.group_id", true)?;
106 self.generation_id.write(output)?;
107 self.member_id.write_ext(output, "self.member_id", true)?;
108 self.group_instance_id.write_ext(output, "self.group_instance_id", true)?;
109 write_tagged_fields(output, &[], &self._unknown_tagged_fields)?;
110 Ok(())
111 }
112}
113
114#[cfg(test)]
115mod tests {
116 use super::*;
117 use proptest::prelude::*;
118
119 #[test]
120 fn test_java_default() {
121 crate::test_utils::test_java_default::<HeartbeatRequest>("HeartbeatRequest", 4);
122 }
123
124 proptest! {
125 #[test]
126 fn test_serde(data: HeartbeatRequest) {
127 crate::test_utils::test_serde(&data)?;
128 }
129 }
130
131 proptest! {
132 #[test]
133 fn test_java_arbitrary(data: HeartbeatRequest) {
134 crate::test_utils::test_java_arbitrary(&data, "HeartbeatRequest", 4);
135 }
136 }
137}