kafka_wire_protocol/schema/request_header/
v1.rs1use std::io::{Read, Result, Write};
4
5use serde::{Deserialize, Serialize};
6#[cfg(test)] use proptest_derive::Arbitrary;
7
8use crate::markers::{ApiMessage, Header};
9use crate::readable_writable::{Readable, Writable};
10#[cfg(test)] use crate::test_utils::proptest_strategies;
11
12#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
14#[cfg_attr(test, derive(Arbitrary))]
15pub struct RequestHeader {
16 pub request_api_key: i16,
18 pub request_api_version: i16,
20 pub correlation_id: i32,
22 #[cfg_attr(test, proptest(strategy = "proptest_strategies::optional_string()"))]
24 pub client_id: Option<String>,
25}
26
27impl ApiMessage for RequestHeader {
28 fn api_key(&self) -> i16 {
29 -1
30 }
31
32 fn version(&self) -> i16 {
33 1
34 }
35}
36
37impl Header for RequestHeader { }
38
39impl Default for RequestHeader {
40 fn default() -> Self {
41 RequestHeader {
42 request_api_key: 0_i16,
43 request_api_version: 0_i16,
44 correlation_id: 0_i32,
45 client_id: Some(String::from("")),
46 }
47 }
48}
49
50impl RequestHeader {
51 pub fn new<S1: AsRef<str>>(request_api_key: i16, request_api_version: i16, correlation_id: i32, client_id: Option<S1>) -> Self {
52 Self {
53 request_api_key,
54 request_api_version,
55 correlation_id,
56 client_id: client_id.map(|s| s.as_ref().to_string()),
57 }
58 }
59}
60
61#[cfg(test)]
62mod tests_request_header_new_and_default {
63 use super::*;
64
65 #[test]
66 fn test() {
67 let d = RequestHeader::new(
68 0_i16,
69 0_i16,
70 0_i32,
71 Some(String::from("")),
72 );
73 assert_eq!(d, RequestHeader::default());
74 }
75}
76
77impl Readable for RequestHeader {
78 fn read(#[allow(unused)] input: &mut impl Read) -> Result<Self> {
79 let request_api_key = i16::read(input)?;
80 let request_api_version = i16::read(input)?;
81 let correlation_id = i32::read(input)?;
82 let client_id = Option::<String>::read_ext(input, "client_id", false)?;
83 Ok(RequestHeader {
84 request_api_key, request_api_version, correlation_id, client_id
85 })
86 }
87}
88
89impl Writable for RequestHeader {
90 fn write(&self, #[allow(unused)] output: &mut impl Write) -> Result<()> {
91 self.request_api_key.write(output)?;
92 self.request_api_version.write(output)?;
93 self.correlation_id.write(output)?;
94 self.client_id.write_ext(output, "self.client_id", false)?;
95 Ok(())
96 }
97}
98
99#[cfg(test)]
100mod tests {
101 use super::*;
102 use proptest::prelude::*;
103
104 #[test]
105 fn test_java_default() {
106 crate::test_utils::test_java_default::<RequestHeader>("RequestHeader", 1);
107 }
108
109 proptest! {
110 #[test]
111 fn test_serde(data: RequestHeader) {
112 crate::test_utils::test_serde(&data)?;
113 }
114 }
115
116 proptest! {
117 #[test]
118 fn test_java_arbitrary(data: RequestHeader) {
119 crate::test_utils::test_java_arbitrary(&data, "RequestHeader", 1);
120 }
121 }
122}