use crate::v1::endpoints::administration::Administration;
use crate::v1::error::APIError;
use crate::v1::helpers::format_response;
use crate::v1::resources::administration::project::CreateProjectParameters;
use crate::v1::resources::administration::project::ModifyProjectParameters;
use crate::v1::resources::administration::project::Project;
use crate::v1::resources::shared::ListResponse;
use crate::v1::resources::shared::SimpleListParameters;
pub struct Projects<'a> {
pub administration: &'a Administration<'a>,
}
impl Administration<'_> {
pub fn projects(&self) -> Projects<'_> {
Projects {
administration: self,
}
}
}
impl Projects<'_> {
pub async fn list(
&self,
query: Option<SimpleListParameters>,
) -> Result<ListResponse<Project>, APIError> {
let response = self
.administration
.client
.get_with_query("/organization/projects", &query)
.await?;
let response: ListResponse<Project> = format_response(response)?;
Ok(response)
}
pub async fn retrieve(&self, project_id: &str) -> Result<Project, APIError> {
let response = self
.administration
.client
.get(&format!("/organization/projects/{project_id}"))
.await?;
let response: Project = format_response(response)?;
Ok(response)
}
pub async fn create(&self, parameters: CreateProjectParameters) -> Result<Project, APIError> {
let response = self
.administration
.client
.post("/organization/projects", ¶meters, None)
.await?;
let response: Project = format_response(response.data)?;
Ok(response)
}
pub async fn modify(
&self,
project_id: &str,
parameters: ModifyProjectParameters,
) -> Result<Project, APIError> {
let response = self
.administration
.client
.post(
&format!("/organization/projects/{project_id}"),
¶meters,
None,
)
.await?;
let response: Project = format_response(response.data)?;
Ok(response)
}
pub async fn archive(&self, project_id: &str) -> Result<Project, APIError> {
let response = self
.administration
.client
.post(
&format!("/organization/projects/{project_id}/archive"),
&(),
None,
)
.await?;
let response: Project = format_response(response.data)?;
Ok(response)
}
}