use anyhow::Result;
use serde::Serialize;
use std::ops::Deref;
use crate::{
domain::{Mbox, RawMbox},
output::{PrintTable, PrintTableOpts, WriteColor},
ui::Table,
};
pub(crate) type RawMboxes = imap::types::ZeroCopy<Vec<RawMbox>>;
#[derive(Debug, Default, Serialize)]
pub struct Mboxes<'a>(pub Vec<Mbox<'a>>);
impl<'a> Deref for Mboxes<'a> {
type Target = Vec<Mbox<'a>>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl<'a> PrintTable for Mboxes<'a> {
fn print_table(&self, writter: &mut dyn WriteColor, opts: PrintTableOpts) -> Result<()> {
writeln!(writter)?;
Table::print(writter, self, opts)?;
writeln!(writter)?;
Ok(())
}
}
impl<'a> From<&'a RawMboxes> for Mboxes<'a> {
fn from(raw_mboxes: &'a RawMboxes) -> Mboxes<'a> {
Self(raw_mboxes.iter().map(Mbox::from).collect())
}
}