rabbitmq_stream_protocol/commands/
generic.rs1use std::io::Write;
2
3use crate::{
4 codec::{Decoder, Encoder},
5 error::{DecodeError, EncodeError},
6 FromResponse, ResponseCode, ResponseKind,
7};
8
9#[cfg_attr(test, derive(fake::Dummy))]
10#[derive(PartialEq, Eq, Debug)]
11pub struct GenericResponse {
12 pub(crate) correlation_id: u32,
13 code: ResponseCode,
14}
15
16impl GenericResponse {
17 pub fn code(&self) -> &ResponseCode {
19 &self.code
20 }
21
22 pub fn is_ok(&self) -> bool {
23 self.code == ResponseCode::Ok
24 }
25}
26
27impl Encoder for GenericResponse {
28 fn encoded_size(&self) -> u32 {
29 self.correlation_id.encoded_size() + self.code.encoded_size()
30 }
31
32 fn encode(&self, writer: &mut impl Write) -> Result<(), EncodeError> {
33 self.correlation_id.encode(writer)?;
34 self.code.encode(writer)?;
35 Ok(())
36 }
37}
38
39impl Decoder for GenericResponse {
40 fn decode(input: &[u8]) -> Result<(&[u8], Self), DecodeError> {
41 let (input, correlation_id) = u32::decode(input)?;
42 let (input, code) = ResponseCode::decode(input)?;
43
44 Ok((
45 input,
46 GenericResponse {
47 correlation_id,
48 code,
49 },
50 ))
51 }
52}
53
54impl FromResponse for GenericResponse {
55 fn from_response(response: crate::Response) -> Option<Self> {
56 match response.kind {
57 ResponseKind::Generic(generic) => Some(generic),
58 _ => None,
59 }
60 }
61}
62
63#[cfg(test)]
64mod tests {
65
66 use crate::commands::tests::command_encode_decode_test;
67
68 use super::GenericResponse;
69
70 #[test]
71 fn sasl_authenticate_request_test() {
72 command_encode_decode_test::<GenericResponse>()
73 }
74}