io_msgraph/v1/rest/users/messages/
list.rs1use alloc::format;
7
8use io_http::rfc6750::bearer::HttpAuthBearer;
9use log::{debug, trace};
10use serde::Serialize;
11use url::Url;
12
13use crate::{
14 coroutine::*,
15 msgraph_try,
16 v1::{
17 query::to_query_pairs,
18 rest::users::messages::MsgraphMessagesListResponse,
19 send::{MSGRAPH_API_BASE, MsgraphSend, MsgraphSendError, MsgraphSendOutput, user_path},
20 },
21};
22
23#[derive(Debug, Clone, Default, Serialize, Eq, PartialEq)]
25pub struct MsgraphMessagesListParams<'a> {
26 #[serde(rename = "$top")]
28 pub top: Option<u32>,
29 #[serde(rename = "$skip")]
31 pub skip: Option<u32>,
32 #[serde(rename = "$select")]
34 pub select: Option<&'a str>,
35 #[serde(rename = "$filter")]
37 pub filter: Option<&'a str>,
38 #[serde(rename = "$orderby")]
40 pub orderby: Option<&'a str>,
41 #[serde(rename = "$count")]
43 pub count: Option<bool>,
44 #[serde(rename = "$search")]
47 pub search: Option<&'a str>,
48}
49
50pub struct MsgraphMessagesList {
52 send: MsgraphSend<MsgraphMessagesListResponse>,
53}
54
55impl MsgraphMessagesList {
56 pub fn new(
59 auth: &HttpAuthBearer,
60 user_id: &str,
61 folder: Option<&str>,
62 params: &MsgraphMessagesListParams,
63 ) -> Result<Self, MsgraphSendError> {
64 debug!("prepare microsoft graph messages listing");
65 trace!("folder: {folder:?}");
66 trace!("params: {params:?}");
67
68 let user = user_path(user_id);
69 let path = match folder {
70 Some(folder) => format!("{user}/mailFolders/{folder}/messages"),
71 None => format!("{user}/messages"),
72 };
73 let mut url = Url::parse(MSGRAPH_API_BASE)?.join(&path)?;
74 url.query_pairs_mut().extend_pairs(to_query_pairs(params));
75
76 let send = MsgraphSend::get(auth, url);
77
78 Ok(Self { send })
79 }
80}
81
82impl MsgraphCoroutine for MsgraphMessagesList {
83 type Yield = MsgraphYield;
84 type Return = Result<MsgraphSendOutput<MsgraphMessagesListResponse>, MsgraphSendError>;
85
86 fn resume(&mut self, arg: Option<&[u8]>) -> MsgraphCoroutineState<Self::Yield, Self::Return> {
87 let out = msgraph_try!(&mut self.send, arg);
88 debug!("messages listed");
89 trace!("out: {out:?}");
90 MsgraphCoroutineState::Complete(Ok(out))
91 }
92}