/
basuev
/
gverse
Обзор
Документация
Войти
/
basuev
/
gverse
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/api/collaborators.rs
72 строки
2 KB
basuev
initial commit: gverse v0.1.0
27 май 2026, 08:52
27 май 2026, 08:52
98b24dd
Код
Авторство
О чём код?
use crate::api::split_repo; use crate::client::Client; use crate::config::Config; use crate::error::Result; use crate::output::{Format, print_value}; use clap::Subcommand; use reqwest::Method; use serde_json::{Map, Value}; #[derive(Subcommand, Debug)] pub enum CollaboratorsCmd { List { repo: String, #[arg(long)] page: Option<u32>, #[arg(long)] limit: Option<u32>, }, Add { repo: String, username: String, #[arg(long)] permission: Option<String>, }, } pub async fn run( cmd: CollaboratorsCmd, cfg: &Config, profile: Option<&str>, fmt: Format, ) -> Result<()> { let p = cfg.active_profile(profile)?; let client = Client::new(p)?; match cmd { CollaboratorsCmd::List { repo, page, limit } => { let (owner, name) = split_repo(&repo)?; let mut q: Vec<(&str, String)> = Vec::new(); if let Some(v) = page { q.push(("page", v.to_string())); } if let Some(v) = limit { q.push(("limit", v.to_string())); } let v = client .get_value(&format!("/repos/{owner}/{name}/collaborators"), &q) .await?; print_value(fmt, &v); Ok(()) } CollaboratorsCmd::Add { repo, username, permission, } => { let (owner, name) = split_repo(&repo)?; let mut payload = Map::new(); if let Some(p) = permission { payload.insert("permission".into(), Value::String(p)); } client .send_json( Method::PUT, &format!("/repos/{owner}/{name}/collaborators/{username}"), &Value::Object(payload), ) .await?; eprintln!("added `{username}` as collaborator on `{owner}/{name}`"); Ok(()) } } }