kafka_wire_protocol/schema/share_group_heartbeat_request/
v0.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_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/// ShareGroupHeartbeatRequest, version 0.
15#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
16#[cfg_attr(test, derive(Arbitrary))]
17pub struct ShareGroupHeartbeatRequest {
18    /// The group identifier.
19    #[cfg_attr(test, proptest(strategy = "proptest_strategies::string()"))]
20    pub group_id: String,
21    /// The member id.
22    #[cfg_attr(test, proptest(strategy = "proptest_strategies::string()"))]
23    pub member_id: String,
24    /// The current member epoch; 0 to join the group; -1 to leave the group.
25    pub member_epoch: i32,
26    /// null if not provided or if it didn't change since the last heartbeat; the rack ID of consumer otherwise.
27    #[cfg_attr(test, proptest(strategy = "proptest_strategies::optional_string()"))]
28    pub rack_id: Option<String>,
29    /// null if it didn't change since the last heartbeat; the subscribed topic names otherwise.
30    #[cfg_attr(test, proptest(strategy = "proptest_strategies::optional_vec()"))]
31    pub subscribed_topic_names: Option<Vec<String>>,
32    /// Unknown tagged fields.
33    #[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}