gitee-cli-rs 0.2.2

A gh-like command-line client for Gitee
Documentation
use std::io::Write;

use super::{confirm, Ctx};
use crate::api::webhooks::{self, CreateWebhook};
use crate::cli::WebhookCmd;
use crate::error::Result;
use crate::out;

pub fn execute(ctx: &Ctx, cmd: WebhookCmd) -> Result<()> {
    match cmd {
        WebhookCmd::List { limit } => {
            let repo = ctx.repo()?;
            let items = ctx.client.webhooks(repo).list(limit.limit)?;
            let mut out = std::io::stdout().lock();
            ctx.out
                .render(&mut out, &items, |w| out::webhook_table(w, &items))?;
        }
        WebhookCmd::Create {
            url,
            events,
            password,
        } => {
            let repo = ctx.repo()?;
            let selected = webhooks::parse_events(&events)?;
            let (push_events, tag_push_events, issues_events, merge_requests_events, note_events) =
                webhooks::event_bools(&selected);
            let hook = ctx.client.webhooks(repo).create(&CreateWebhook {
                url: &url,
                password: password.as_deref(),
                push_events,
                tag_push_events,
                issues_events,
                merge_requests_events,
                note_events,
            })?;
            let items = [hook];
            let mut out = std::io::stdout().lock();
            ctx.out
                .render(&mut out, &items, |w| out::webhook_table(w, &items))?;
        }
        WebhookCmd::Delete { id, yes } => {
            let repo = ctx.repo()?;
            confirm(&format!("Delete webhook {id}"), yes)?;
            ctx.client.webhooks(repo).delete(id)?;
            writeln!(std::io::stdout().lock(), "Deleted webhook {id}")?;
        }
    }
    Ok(())
}