use serde::Serialize;
use crate::models::copilot_spaces::{
CopilotSpace, CopilotSpaceCollaboratorsResponse, CopilotSpaceResource,
CopilotSpaceResourcesResponse, CopilotSpacesResponse,
};
use crate::{Octocrab, Result};
pub struct CopilotSpacesHandler<'octo> {
crab: &'octo Octocrab,
}
impl<'octo> CopilotSpacesHandler<'octo> {
pub(crate) fn new(crab: &'octo Octocrab) -> Self {
Self { crab }
}
pub fn org<O: Into<String>>(&self, org: O) -> OrgCopilotSpacesHandler<'octo> {
OrgCopilotSpacesHandler {
crab: self.crab,
org: org.into(),
}
}
pub fn user<U: Into<String>>(&self, user: U) -> UserCopilotSpacesHandler<'octo> {
UserCopilotSpacesHandler {
crab: self.crab,
user: user.into(),
}
}
}
pub struct OrgCopilotSpacesHandler<'octo> {
crab: &'octo Octocrab,
org: String,
}
impl<'octo> OrgCopilotSpacesHandler<'octo> {
pub(crate) fn new(crab: &'octo Octocrab, org: impl Into<String>) -> Self {
Self {
crab,
org: org.into(),
}
}
pub async fn list(&self) -> Result<CopilotSpacesResponse> {
let route = format!("/orgs/{}/copilot-spaces", self.org);
self.crab.get(route, None::<&()>).await
}
pub async fn create(&self, body: &impl Serialize) -> Result<CopilotSpace> {
let route = format!("/orgs/{}/copilot-spaces", self.org);
self.crab.post(route, Some(body)).await
}
pub async fn get(&self, space_number: u64) -> Result<CopilotSpace> {
let route = format!("/orgs/{}/copilot-spaces/{}", self.org, space_number);
self.crab.get(route, None::<&()>).await
}
pub async fn set(&self, space_number: u64, body: &impl Serialize) -> Result<CopilotSpace> {
let route = format!("/orgs/{}/copilot-spaces/{}", self.org, space_number);
self.crab.put(route, Some(body)).await
}
pub async fn delete(&self, space_number: u64) -> Result<()> {
let route = format!("/orgs/{}/copilot-spaces/{}", self.org, space_number);
let res = self.crab._delete(route, None::<&()>).await?;
crate::map_github_error(res).await.map(drop)
}
pub async fn list_collaborators(
&self,
space_number: u64,
) -> Result<CopilotSpaceCollaboratorsResponse> {
let route = format!(
"/orgs/{}/copilot-spaces/{}/collaborators",
self.org, space_number
);
self.crab.get(route, None::<&()>).await
}
pub async fn add_collaborator(&self, space_number: u64, body: &impl Serialize) -> Result<()> {
let route = format!(
"/orgs/{}/copilot-spaces/{}/collaborators",
self.org, space_number
);
let res = self.crab._post(route, Some(body)).await?;
crate::map_github_error(res).await.map(drop)
}
pub async fn set_collaborator_role(
&self,
space_number: u64,
actor_type: impl AsRef<str>,
actor_identifier: impl AsRef<str>,
body: &impl Serialize,
) -> Result<()> {
let route = format!(
"/orgs/{}/copilot-spaces/{}/collaborators/{}/{}",
self.org,
space_number,
actor_type.as_ref(),
actor_identifier.as_ref()
);
let res = self.crab._put(route, Some(body)).await?;
crate::map_github_error(res).await.map(drop)
}
pub async fn remove_collaborator(
&self,
space_number: u64,
actor_type: impl AsRef<str>,
actor_identifier: impl AsRef<str>,
) -> Result<()> {
let route = format!(
"/orgs/{}/copilot-spaces/{}/collaborators/{}/{}",
self.org,
space_number,
actor_type.as_ref(),
actor_identifier.as_ref()
);
let res = self.crab._delete(route, None::<&()>).await?;
crate::map_github_error(res).await.map(drop)
}
pub async fn list_resources(&self, space_number: u64) -> Result<CopilotSpaceResourcesResponse> {
let route = format!(
"/orgs/{}/copilot-spaces/{}/resources",
self.org, space_number
);
self.crab.get(route, None::<&()>).await
}
pub async fn create_resource(
&self,
space_number: u64,
body: &impl Serialize,
) -> Result<CopilotSpaceResource> {
let route = format!(
"/orgs/{}/copilot-spaces/{}/resources",
self.org, space_number
);
self.crab.post(route, Some(body)).await
}
pub async fn get_resource(
&self,
space_number: u64,
space_resource_id: u64,
) -> Result<CopilotSpaceResource> {
let route = format!(
"/orgs/{}/copilot-spaces/{}/resources/{}",
self.org, space_number, space_resource_id
);
self.crab.get(route, None::<&()>).await
}
pub async fn set_resource(
&self,
space_number: u64,
space_resource_id: u64,
body: &impl Serialize,
) -> Result<CopilotSpaceResource> {
let route = format!(
"/orgs/{}/copilot-spaces/{}/resources/{}",
self.org, space_number, space_resource_id
);
self.crab.put(route, Some(body)).await
}
pub async fn delete_resource(&self, space_number: u64, space_resource_id: u64) -> Result<()> {
let route = format!(
"/orgs/{}/copilot-spaces/{}/resources/{}",
self.org, space_number, space_resource_id
);
let res = self.crab._delete(route, None::<&()>).await?;
crate::map_github_error(res).await.map(drop)
}
}
pub struct UserCopilotSpacesHandler<'octo> {
crab: &'octo Octocrab,
user: String,
}
impl<'octo> UserCopilotSpacesHandler<'octo> {
pub(crate) fn new(crab: &'octo Octocrab, user: impl Into<String>) -> Self {
Self {
crab,
user: user.into(),
}
}
pub async fn list(&self) -> Result<CopilotSpacesResponse> {
let route = format!("/users/{}/copilot-spaces", self.user);
self.crab.get(route, None::<&()>).await
}
pub async fn create(&self, body: &impl Serialize) -> Result<CopilotSpace> {
let route = format!("/users/{}/copilot-spaces", self.user);
self.crab.post(route, Some(body)).await
}
pub async fn get(&self, space_number: u64) -> Result<CopilotSpace> {
let route = format!("/users/{}/copilot-spaces/{}", self.user, space_number);
self.crab.get(route, None::<&()>).await
}
pub async fn set(&self, space_number: u64, body: &impl Serialize) -> Result<CopilotSpace> {
let route = format!("/users/{}/copilot-spaces/{}", self.user, space_number);
self.crab.put(route, Some(body)).await
}
pub async fn delete(&self, space_number: u64) -> Result<()> {
let route = format!("/users/{}/copilot-spaces/{}", self.user, space_number);
let res = self.crab._delete(route, None::<&()>).await?;
crate::map_github_error(res).await.map(drop)
}
pub async fn list_collaborators(
&self,
space_number: u64,
) -> Result<CopilotSpaceCollaboratorsResponse> {
let route = format!(
"/users/{}/copilot-spaces/{}/collaborators",
self.user, space_number
);
self.crab.get(route, None::<&()>).await
}
pub async fn add_collaborator(&self, space_number: u64, body: &impl Serialize) -> Result<()> {
let route = format!(
"/users/{}/copilot-spaces/{}/collaborators",
self.user, space_number
);
let res = self.crab._post(route, Some(body)).await?;
crate::map_github_error(res).await.map(drop)
}
pub async fn set_collaborator_role(
&self,
space_number: u64,
actor_type: impl AsRef<str>,
actor_identifier: impl AsRef<str>,
body: &impl Serialize,
) -> Result<()> {
let route = format!(
"/users/{}/copilot-spaces/{}/collaborators/{}/{}",
self.user,
space_number,
actor_type.as_ref(),
actor_identifier.as_ref()
);
let res = self.crab._put(route, Some(body)).await?;
crate::map_github_error(res).await.map(drop)
}
pub async fn remove_collaborator(
&self,
space_number: u64,
actor_type: impl AsRef<str>,
actor_identifier: impl AsRef<str>,
) -> Result<()> {
let route = format!(
"/users/{}/copilot-spaces/{}/collaborators/{}/{}",
self.user,
space_number,
actor_type.as_ref(),
actor_identifier.as_ref()
);
let res = self.crab._delete(route, None::<&()>).await?;
crate::map_github_error(res).await.map(drop)
}
pub async fn list_resources(&self, space_number: u64) -> Result<CopilotSpaceResourcesResponse> {
let route = format!(
"/users/{}/copilot-spaces/{}/resources",
self.user, space_number
);
self.crab.get(route, None::<&()>).await
}
pub async fn create_resource(
&self,
space_number: u64,
body: &impl Serialize,
) -> Result<CopilotSpaceResource> {
let route = format!(
"/users/{}/copilot-spaces/{}/resources",
self.user, space_number
);
self.crab.post(route, Some(body)).await
}
pub async fn get_resource(
&self,
space_number: u64,
space_resource_id: u64,
) -> Result<CopilotSpaceResource> {
let route = format!(
"/users/{}/copilot-spaces/{}/resources/{}",
self.user, space_number, space_resource_id
);
self.crab.get(route, None::<&()>).await
}
pub async fn set_resource(
&self,
space_number: u64,
space_resource_id: u64,
body: &impl Serialize,
) -> Result<CopilotSpaceResource> {
let route = format!(
"/users/{}/copilot-spaces/{}/resources/{}",
self.user, space_number, space_resource_id
);
self.crab.put(route, Some(body)).await
}
pub async fn delete_resource(&self, space_number: u64, space_resource_id: u64) -> Result<()> {
let route = format!(
"/users/{}/copilot-spaces/{}/resources/{}",
self.user, space_number, space_resource_id
);
let res = self.crab._delete(route, None::<&()>).await?;
crate::map_github_error(res).await.map(drop)
}
}