use crate::Client;
use crate::error::Error;
use crate::message::MessagePreview;
use jiff::Timestamp;
use serde::Deserialize;
#[derive(Clone, Eq, PartialEq, Hash, Debug, Deserialize)]
pub(crate) struct MailboxData {
token: String,
#[serde(rename = "mailbox")]
address: String,
}
#[derive(Clone, Debug)]
pub struct Mailbox<'a> {
client: &'a Client,
data: MailboxData,
}
impl<'a> Mailbox<'a> {
pub(crate) fn new(client: &'a Client, data: MailboxData) -> Self {
Self { client, data }
}
pub fn address(&self) -> &str {
&self.data.address
}
pub async fn list_messages(
&'a self,
after: Option<Timestamp>,
) -> Result<Vec<MessagePreview<'a>>, Error> {
let data = self
.client
.list_mailbox_messages(&self.data.token, after)
.await?;
Ok(data
.into_iter()
.map(|data| MessagePreview::new(self.client, self, data))
.collect())
}
pub(crate) fn token(&self) -> &str {
&self.data.token
}
}