use domo::public::buzz::Integration;
use domo::public::buzz::Subscription;
use domo::public::Client;
use structopt::StructOpt;
use super::util;
#[derive(StructOpt, Debug)]
pub enum BuzzCommand {
#[structopt(name = "list")]
List {},
#[structopt(name = "create")]
CreateIntegration {},
#[structopt(name = "retrieve")]
Retrieve { id: String },
#[structopt(name = "delete")]
Delete { id: String },
#[structopt(name = "list-subscriptions")]
ListSubscriptions { id: String },
#[structopt(name = "create-subscription")]
CreateSubscription { id: String },
#[structopt(name = "delete-subscription")]
DeleteSubscription { id: String, subscription_id: String },
}
pub async fn execute(dc: Client, editor: &str, template: Option<String>, command: BuzzCommand) {
match command {
BuzzCommand::List {} => {
let r = dc.get_integrations().await.unwrap();
util::vec_obj_template_output(r, template);
}
BuzzCommand::CreateIntegration {} => {
let r = Integration::template();
let r = util::edit_obj(editor, r, "").unwrap();
let r = dc.post_integration(r).await.unwrap();
util::obj_template_output(r, template);
}
BuzzCommand::Retrieve { id } => {
let r = dc.get_integration(&id).await.unwrap();
util::obj_template_output(r, template);
}
BuzzCommand::Delete { id } => {
dc.delete_integration(&id).await.unwrap();
}
BuzzCommand::ListSubscriptions { id } => {
let r = dc.get_integration_subscriptions(&id).await.unwrap();
util::vec_obj_template_output(r, template);
}
BuzzCommand::CreateSubscription { id } => {
let r = Subscription::template();
let r = util::edit_obj(editor, r, "").unwrap();
let r = dc.post_integration_subscription(&id, r).await.unwrap();
util::obj_template_output(r, template);
}
BuzzCommand::DeleteSubscription {
id,
subscription_id,
} => {
dc.delete_integration_subscription(&id, &subscription_id)
.await
.unwrap();
}
}
}