gitee_cli_rs/cmd/
webhook.rs1use std::io::Write;
2
3use super::{confirm, Ctx};
4use crate::api::webhooks::{self, CreateWebhook};
5use crate::cli::WebhookCmd;
6use crate::error::Result;
7use crate::out;
8
9pub fn execute(ctx: &Ctx, cmd: WebhookCmd) -> Result<()> {
10 match cmd {
11 WebhookCmd::List { limit } => {
12 let repo = ctx.repo()?;
13 let items = ctx.client.webhooks(repo).list(limit.limit)?;
14 let mut out = std::io::stdout().lock();
15 ctx.out
16 .render(&mut out, &items, |w| out::webhook_table(w, &items))?;
17 }
18 WebhookCmd::Create {
19 url,
20 events,
21 password,
22 } => {
23 let repo = ctx.repo()?;
24 let selected = webhooks::parse_events(&events)?;
25 let (push_events, tag_push_events, issues_events, merge_requests_events, note_events) =
26 webhooks::event_bools(&selected);
27 let hook = ctx.client.webhooks(repo).create(&CreateWebhook {
28 url: &url,
29 password: password.as_deref(),
30 push_events,
31 tag_push_events,
32 issues_events,
33 merge_requests_events,
34 note_events,
35 })?;
36 let items = [hook];
37 let mut out = std::io::stdout().lock();
38 ctx.out
39 .render(&mut out, &items, |w| out::webhook_table(w, &items))?;
40 }
41 WebhookCmd::Delete { id, yes } => {
42 let repo = ctx.repo()?;
43 confirm(&format!("Delete webhook {id}"), yes)?;
44 ctx.client.webhooks(repo).delete(id)?;
45 writeln!(std::io::stdout().lock(), "Deleted webhook {id}")?;
46 }
47 }
48 Ok(())
49}