Skip to main content

gitee_cli_rs/cmd/
webhook.rs

1use 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}