codeberg_cli/actions/label/
delete.rs1use forgejo_api::structs::IssueListLabelsQuery;
2
3use crate::actions::label::display_label;
4
5use crate::actions::GlobalArgs;
6use crate::render::spinner::spin_until_ready;
7use crate::render::ui::multi_fuzzy_select_with_key;
8
9use crate::actions::text_manipulation::select_prompt_for;
10use crate::types::context::BergContext;
11use crate::types::git::OwnerRepo;
12
13use clap::Parser;
14
15#[derive(Parser, Debug)]
17pub struct DeleteLabelArgs {}
18
19impl DeleteLabelArgs {
20 pub async fn run(self, global_args: GlobalArgs) -> anyhow::Result<()> {
21 let _ = global_args;
22 let ctx = BergContext::new(self, global_args).await?;
23
24 let OwnerRepo { repo, owner } = ctx.owner_repo()?;
25 let (_, labels_list) = spin_until_ready(
26 ctx.client
27 .issue_list_labels(
28 owner.as_str(),
29 repo.as_str(),
30 IssueListLabelsQuery::default(),
31 )
32 .send(),
33 )
34 .await?;
35
36 let selected_labels = multi_fuzzy_select_with_key(
39 &labels_list,
40 select_prompt_for("label"),
41 |_| false,
42 display_label,
43 )?;
44
45 for id in selected_labels.into_iter().filter_map(|label| label.id) {
46 ctx.client
47 .issue_delete_label(owner.as_str(), repo.as_str(), id)
48 .await?;
49 }
50
51 Ok(())
52 }
53}