redust/model/stream/
claim.rs

1use serde::{Deserialize, Serialize};
2
3use super::{read::Entries, Id};
4
5/// Response from [`XAUTOCLAIM`](https://redis.io/commands/xautoclaim/).
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
7pub struct AutoclaimResponse<'a>(
8	/// The ID to use in the next `XAUTOCLAIM` call.
9	pub Id,
10	/// The entries which were claimed in this call.
11	#[serde(borrow)]
12	pub Entries<'a>,
13	/// Entries removed from the PEL.
14	#[serde(default)]
15	pub Vec<Id>,
16);
17
18#[cfg(test)]
19mod test {
20	use redust_resp::from_bytes;
21
22	use crate::model::stream::{
23		read::{Entries, Entry, Field, Value},
24		Id,
25	};
26
27	use super::AutoclaimResponse;
28
29	#[test]
30	fn de() {
31		let data =
32			b"*3\r\n+0-0\r\n*1\r\n*2\r\n+1234-5678\r\n*2\r\n$5\r\nfield\r\n$5\r\nvalue\r\n*0\r\n";
33
34		let (res, rem) = from_bytes::<AutoclaimResponse>(data).unwrap();
35		let mut entries = Entries::default();
36		let mut entry = Entry::new();
37
38		let field = Field(b"field"[..].into());
39		let value = Value(b"value"[..].into());
40		entry.insert(field, value);
41
42		entries.0.insert(Id(1234, 5678), entry);
43
44		assert_eq!(res, AutoclaimResponse(Id(0, 0), entries, Vec::new()));
45		assert_eq!(rem, []);
46	}
47}