iggy_binary_protocol/requests/streams/
get_stream.rs1use crate::WireError;
19use crate::WireIdentifier;
20use crate::codec::{WireDecode, WireEncode};
21use bytes::BytesMut;
22
23#[derive(Debug, Clone, PartialEq, Eq)]
25pub struct GetStreamRequest {
26 pub stream_id: WireIdentifier,
27}
28
29impl WireEncode for GetStreamRequest {
30 fn encoded_size(&self) -> usize {
31 self.stream_id.encoded_size()
32 }
33
34 fn encode(&self, buf: &mut BytesMut) {
35 self.stream_id.encode(buf);
36 }
37}
38
39impl WireDecode for GetStreamRequest {
40 fn decode(buf: &[u8]) -> Result<(Self, usize), WireError> {
41 let (stream_id, consumed) = WireIdentifier::decode(buf)?;
42 Ok((Self { stream_id }, consumed))
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use super::*;
49
50 #[test]
51 fn roundtrip_numeric() {
52 let req = GetStreamRequest {
53 stream_id: WireIdentifier::numeric(42),
54 };
55 let bytes = req.to_bytes();
56 let (decoded, consumed) = GetStreamRequest::decode(&bytes).unwrap();
57 assert_eq!(consumed, bytes.len());
58 assert_eq!(decoded, req);
59 }
60
61 #[test]
62 fn roundtrip_named() {
63 let req = GetStreamRequest {
64 stream_id: WireIdentifier::named("my-stream").unwrap(),
65 };
66 let bytes = req.to_bytes();
67 let (decoded, consumed) = GetStreamRequest::decode(&bytes).unwrap();
68 assert_eq!(consumed, bytes.len());
69 assert_eq!(decoded, req);
70 }
71
72 #[test]
73 fn wire_compat_numeric_byte_layout() {
74 let req = GetStreamRequest {
75 stream_id: WireIdentifier::numeric(1),
76 };
77 let bytes = req.to_bytes();
78 assert_eq!(&bytes[..], &[1, 4, 1, 0, 0, 0]);
79 }
80}