Files
cull-gmail/src/message_cli.rs
Jeremiah Russell 9247839ccc ♻️ refactor(message): rename Message to MessageList
- rename Message struct to MessageList for clarity
- reflect the change in the instantiation
2025-10-05 09:49:56 +01:00

51 lines
1.6 KiB
Rust

use clap::Parser;
use cull_gmail::{Error, Labels, MessageList};
/// Command line options for the list subcommand
#[derive(Debug, Parser)]
pub struct MessageCli {
/// Maximum results per page
#[arg(short, long, default_value = cull_gmail::DEFAULT_MAX_RESULTS)]
max_results: u32,
/// Maximum number of pages (0=all)
#[arg(short, long, default_value = "1")]
pages: u32,
/// Labels to filter the message list
#[arg(short, long)]
labels: Vec<String>,
/// Query string to select messages to list
#[arg(short = 'Q', long)]
query: Option<String>,
}
impl MessageCli {
pub(crate) async fn run(&self, credential_file: &str) -> Result<(), Error> {
let mut list = MessageList::new(credential_file).await?;
if !self.labels.is_empty() {
// add labels if any specified
let label_list = Labels::new(credential_file, false).await?;
log::trace!("labels found and setup {label_list:#?}");
log::debug!("labels from command line: {:?}", self.labels);
let mut label_ids = Vec::new();
for label in &self.labels {
if let Some(id) = label_list.get_label_id(label) {
label_ids.push(id)
}
}
list.add_labels(label_ids.as_slice());
}
if let Some(query) = self.query.as_ref() {
list.set_query(query)
}
log::trace!("Max results: `{}`", self.max_results);
list.set_max_results(self.max_results);
log::debug!("List max results set to {}", list.max_results());
list.run(self.pages).await
}
}