use bunny_api::support::{list_tickets, list_all_tickets, Ticket};
use clap::Parser;
use super::Common;
#[derive(Debug, thiserror::Error)]
#[error(transparent)]
pub enum Error {
Client(#[from] bunny_api::ClientError),
API(#[from] bunny_api::Error<bunny_api::NoSpecificError>),
}
#[derive(Debug, Parser)]
pub enum Cli {
ListTickets {
#[clap(flatten)]
common: Common,
#[clap(long)]
page: Option<i32>,
#[clap(long)]
per_page: Option<i32>,
},
ListAllTickets {
#[clap(flatten)]
common: Common,
}
}
impl Cli {
fn list_tickets(resp: Vec<Ticket>) {
for ticket in resp {
println!(
"{} ({}): {}",
ticket.id,
ticket.status.as_deref().unwrap_or("[No Status]"),
ticket.subject.as_deref().unwrap_or("[No Subject]"),
);
}
}
pub async fn run(self) -> Result<(), Error> {
match self {
Cli::ListTickets { common, page, per_page } => {
let client = common.client()?;
let list = list_tickets(&client, page, per_page).await?;
Self::list_tickets(list.items);
}
Cli::ListAllTickets { common } => {
let client = common.client()?;
let list = list_all_tickets(&client).await?;
Self::list_tickets(list);
}
}
Ok(())
}
}