mailinator_rs/api/message/
inbox.rs

1use crate::path::AsUrl;
2use serde::{Deserialize, Serialize};
3use serde_qs as qs;
4
5#[derive(Debug, Serialize, Clone)]
6pub enum Sorting {
7    #[serde(rename = "ascending")]
8    Ascending,
9    #[serde(rename = "descending")]
10    Descending,
11}
12
13#[derive(Debug, Builder, Default, Serialize, Clone)]
14pub struct FetchInboxRequestQueryParams {
15    #[serde(skip_serializing_if = "Option::is_none")]
16    skip: Option<usize>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    limit: Option<usize>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    sort: Option<Sorting>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    decode_subject: Option<bool>,
23}
24
25#[derive(Debug, Builder, Default)]
26pub struct FetchInboxRequest {
27    domain: String,
28    inbox: String,
29    query_params: Option<FetchInboxRequestQueryParams>,
30}
31
32impl AsUrl for FetchInboxRequest {
33    fn as_url_path(self) -> String {
34        let Self {
35            domain,
36            inbox,
37            query_params,
38        } = self;
39
40        query_params.map_or_else(|| format!(
41            "/api/v2/domains/{domain}/inboxes/{inbox}"
42            ), |q|{
43            let qsp = qs::to_string(&q).expect(
44                "Failed to serialize query string params",);
45            format!("/api/v2/domains/{domain}/inboxes/{inbox}?{qsp}")
46        })
47    }
48}
49
50#[derive(Debug, Clone, Deserialize)]
51pub struct Msg {
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub subject: Option<String>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub domain: Option<String>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub from: Option<String>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub id: Option<String>,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub to: Option<String>,
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub time: Option<u64>,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub seconds_ago: Option<u64>,
66}
67
68#[derive(Debug, Clone, Deserialize)]
69pub struct FetchInboxResponse {
70    pub domain: String,
71    pub to: String,
72    pub msgs: Vec<Msg>,
73}