fido/integrations/zendesk/
cli.rs1use clap::{Arg, ArgMatches, Command};
4use figment::Figment;
5use serde::Deserialize;
6use zendesk::resources::tickets::handlers::get_ticket;
7
8use crate::Context;
9
10#[derive(Deserialize)]
12struct Config {
13 base_url: String,
15 email: String,
17 api_token: String,
19 oauth_client_id: String,
21}
22
23pub(crate) fn build_command() -> Command {
25 Command::new("zendesk")
26 .about("Interact with Zendesk")
27 .subcommand(
28 Command::new("tickets")
29 .about("Interact with tickets")
30 .subcommand(
31 Command::new("get")
32 .about("Get ticket")
33 .long_about("Get a ticket from Zendesk")
34 .arg(Arg::new("ticket-number").help("Ticket number")),
35 ),
36 )
37}
38
39pub(crate) async fn process_matches(config_builder: Figment, matches: &ArgMatches) {
41 let context = Context::from_matches(matches);
42 let config: Config = config_builder.select("zendesk").extract().unwrap();
43 let mut client = zendesk::Client::new(
44 config.base_url,
45 config.email,
46 config.api_token,
47 config.oauth_client_id,
48 );
49
50 if let Some(matches) = matches.subcommand_matches("tickets") {
51 if let Some(matches) = matches.subcommand_matches("get") {
52 if let Some(ticket_number) = matches.get_one::<String>("ticket-number") {
53 client.update_token().await;
54 let ticket = get_ticket(client, ticket_number).await.unwrap();
55 if !context.quiet {
56 println!("{ticket:#?}");
57 }
58 }
59 }
60 }
61}