use super::*;
use crate::models::TeamId;
use crate::params;
#[derive(serde::Serialize)]
pub struct CreateTeamBuilder<'octo, 'h, 'a, 'b> {
#[serde(skip)]
handler: &'h TeamHandler<'octo>,
name: String,
#[serde(skip_serializing_if = "Option::is_none")]
description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
maintainers: Option<&'a [String]>,
#[serde(skip_serializing_if = "Option::is_none")]
repo_names: Option<&'b [String]>,
#[serde(skip_serializing_if = "Option::is_none")]
privacy: Option<params::teams::Privacy>,
#[serde(skip_serializing_if = "Option::is_none")]
permission: Option<params::teams::Permission>,
#[serde(skip_serializing_if = "Option::is_none")]
parent_team_id: Option<TeamId>,
}
impl<'octo, 'h, 'a, 'b> CreateTeamBuilder<'octo, 'h, 'a, 'b> {
pub(crate) fn new(handler: &'h TeamHandler<'octo>, name: String) -> Self {
Self {
handler,
name,
description: None,
maintainers: None,
repo_names: None,
privacy: None,
permission: None,
parent_team_id: None,
}
}
pub fn description(mut self, description: impl Into<String>) -> Self {
self.description = Some(description.into());
self
}
pub fn maintainers(mut self, maintainers: &'a (impl AsRef<[String]> + ?Sized)) -> Self {
self.maintainers = Some(maintainers.as_ref());
self
}
pub fn repo_names(mut self, repo_names: &'b (impl AsRef<[String]> + ?Sized)) -> Self {
self.repo_names = Some(repo_names.as_ref());
self
}
pub fn privacy(mut self, privacy: impl Into<params::teams::Privacy>) -> Self {
self.privacy = Some(privacy.into());
self
}
pub fn parent_team_id(mut self, parent_team_id: TeamId) -> Self {
self.parent_team_id = Some(parent_team_id);
self
}
pub async fn send(self) -> Result<models::teams::Team> {
let route = format!("/orgs/{org}/teams", org = self.handler.owner,);
self.handler.crab.post(route, Some(&self)).await
}
}