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