bunny-api 0.0.5

Alpha API client for Bunny.net
Documentation
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(())
    }
}