use std::fmt;
use anyhow::{Result, anyhow};
use clap::Parser;
use io_managesieve::client::ManagesieveClient as _;
use pimalaya_cli::printer::Printer;
use schemars::JsonSchema;
use serde::Serialize;
use crate::sieve::client::SieveClient;
#[derive(Debug, Parser)]
pub struct SieveScriptGetCommand {
#[arg(value_name = "NAME")]
pub name: String,
}
impl SieveScriptGetCommand {
pub fn execute(self, printer: &mut impl Printer, client: &mut SieveClient) -> Result<()> {
let script = client.get_script(self.name.clone())?;
let script = String::from_utf8(script)
.map_err(|_| anyhow!("Sieve script `{}` is not valid UTF-8", self.name))?;
printer.out(SieveScriptOutput {
name: self.name,
script,
})
}
}
#[derive(Clone, Debug, Serialize, JsonSchema)]
#[serde(rename_all = "kebab-case")]
pub struct SieveScriptOutput {
pub name: String,
pub script: String,
}
impl fmt::Display for SieveScriptOutput {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.script)
}
}