use super::{list::PromptList, Run};
use crate::io::Output;
use clap::Args;
use itertools::Itertools;
#[derive(Debug, Args)]
pub struct Capture {
#[clap(long, short, action, default_value_t = false)]
queue: bool,
#[clap(long, short = 's', action, default_value_t = false)]
history: bool,
#[clap(long, short, action, default_value_t = true)]
all: bool,
#[clap(long, short, default_value_t = Output::default())]
output: Output,
#[clap(long, action, default_value_t = false)]
pretty: bool,
}
impl Run for Capture {
async fn run(mut self, client: cmfy::Client) -> cmfy::Result<()> {
if self.queue || self.history {
self.all = false;
}
if self.all {
self.queue = true;
self.history = true;
}
let mut list = PromptList::default();
if self.queue {
let queue = client.queue().await?;
list.append(&mut PromptList::from(queue));
}
if self.history {
let history = client.history().await?;
list.append(&mut PromptList::from(history));
}
let prompts = list.into_prompts().map(|prompt| prompt.nodes).collect_vec();
let output = Output::from(self.output);
output.write_json(&prompts, self.pretty)
}
}