use std::fmt;
use anyhow::{Result, bail};
use clap::Parser;
use pimalaya_cli::{printer::Printer, prompt};
use schemars::JsonSchema;
use serde::Serialize;
use crate::pimdir::client::PimdirClient;
#[derive(Debug, Parser)]
pub struct PimdirQueueCancelCommand {
#[arg(value_name = "ROW")]
pub id: i64,
#[arg(long, short)]
pub yes: bool,
}
impl PimdirQueueCancelCommand {
pub fn execute(self, printer: &mut impl Printer, client: &mut PimdirClient) -> Result<()> {
if !self.yes
&& !prompt::bool(
format!("Cancel the message queued as row {}?", self.id),
false,
)?
{
bail!("Cancellation aborted");
}
if !client.cancel_queued(self.id)? {
bail!(
"No queued action with row {}; it may have been synced already",
self.id
);
}
printer.out(PimdirQueueCancelled { id: self.id })
}
}
#[derive(Clone, Copy, Debug, Serialize, JsonSchema)]
pub struct PimdirQueueCancelled {
pub id: i64,
}
impl fmt::Display for PimdirQueueCancelled {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "Queued message {} cancelled", self.id)
}
}