1use serde::Deserialize;
4
5use crate::Code;
6use crate::session::Session;
7use crate::message::event::EventPacket;
8use crate::error::{assert, Result};
9
10impl Session {
11 async fn get_message(&self, is_fetch: bool, is_newest: bool, count: usize) -> Result<Vec<EventPacket>> {
12 #[derive(Deserialize)]
13 struct Response {
14 code: Code,
15 data: Vec<EventPacket>,
16 }
17
18 let url = format!("/{is_fetch}{is_newest}Message?sessionKey={sessionKey}&count={count}",
19 is_fetch = if is_fetch { "fetch" } else { "peek" },
20 is_newest = if is_newest { "Latest" } else { "" },
21 sessionKey = self.key,
22 count = count);
23
24 let response: Response = self.client.get(&self.url(&url))
25 .send().await?
26 .json().await?;
27
28 assert(response.code, if is_fetch { "Fetching" } else { "Peeking" })?;
29
30 Ok(response.data)
31 }
32
33 pub async fn fetch_newest_message(&self, count: usize) -> Result<Vec<EventPacket>> {
34 self.get_message(true, true, count).await
35 }
36
37 pub async fn fetch_message(&self, count: usize) -> Result<Vec<EventPacket>> {
38 self.get_message(true, false, count).await
39 }
40
41 pub async fn peek_newest_message(&self, count: usize) -> Result<Vec<EventPacket>> {
42 self.get_message(false, true, count).await
43 }
44
45 pub async fn peek_message(&self, count: usize) -> Result<Vec<EventPacket>> {
46 self.get_message(false, false, count).await
47 }
48}