use anyhow::Result;
use clap::Parser;
use pimalaya_cli::printer::{Message, Printer};
use crate::mbox::{
arg::{MboxPathFlag, MessageIdsArg, TargetMboxPathFlag},
client::MboxClient,
};
#[derive(Debug, Parser)]
pub struct MboxMessageCopyCommand {
#[command(flatten)]
pub ids: MessageIdsArg,
#[command(flatten)]
pub source: MboxPathFlag,
#[command(flatten)]
pub target: TargetMboxPathFlag,
}
impl MboxMessageCopyCommand {
pub fn execute(self, printer: &mut impl Printer, client: &mut MboxClient) -> Result<()> {
let ids: Vec<&str> = self.ids.inner.iter().map(String::as_str).collect();
client.copy_messages(&self.source.inner, &self.target.inner, &ids)?;
printer.out(Message::new("Message(s) successfully copied"))
}
}