ably/
presence.rs

1use futures::stream::Stream;
2
3use crate::{http, rest, Result};
4
5/// A type alias for a PaginatedRequestBuilder which uses a MessageItemHandler
6/// to handle pages of presence messages returned from a presence request.
7pub type PaginatedRequestBuilder<'a> = http::PaginatedRequestBuilder<'a, rest::PresenceMessage>;
8
9/// A type alias for a PaginatedResult which uses a MessageItemHandler to
10/// handle pages of presence messages returned from a presence request.
11pub type PaginatedResult = http::PaginatedResult<rest::PresenceMessage>;
12
13/// A builder to construct a REST presence request.
14pub struct RequestBuilder<'a> {
15    inner: PaginatedRequestBuilder<'a>,
16}
17
18impl<'a> RequestBuilder<'a> {
19    pub fn new(inner: PaginatedRequestBuilder<'a>) -> Self {
20        Self { inner }
21    }
22
23    /// Limit the number of results per page.
24    pub fn limit(mut self, limit: u32) -> Self {
25        self.inner = self.inner.limit(limit);
26        self
27    }
28
29    /// Set the client_id query param.
30    pub fn client_id(mut self, client_id: &str) -> Self {
31        self.inner = self.inner.params(&[("clientId", client_id.to_string())]);
32        self
33    }
34
35    /// Set the connection_id query param.
36    pub fn connection_id(mut self, connection_id: &str) -> Self {
37        self.inner = self
38            .inner
39            .params(&[("connectionId", connection_id.to_string())]);
40        self
41    }
42
43    /// Request a stream of pages of presence messages.
44    pub fn pages(self) -> impl Stream<Item = Result<PaginatedResult>> + 'a {
45        self.inner.pages()
46    }
47
48    /// Retrieve the first page of presence messages.
49    pub async fn send(self) -> Result<PaginatedResult> {
50        self.inner.send().await
51    }
52}