Skip to main content

burn_central_client/project/
mod.rs

1pub mod request;
2pub mod response;
3
4use reqwest::Url;
5
6use crate::{
7    Client, ClientError,
8    project::{
9        request::{
10            BurnCentralCodeMetadataRequest, CodeUploadRequest, CrateVersionMetadataRequest,
11            CreateProjectRequest,
12        },
13        response::{CodeUploadUrlsResponse, ProjectResponse},
14    },
15};
16
17impl Client {
18    fn create_project(
19        &self,
20        project_name: &str,
21        project_description: Option<&str>,
22        url: Url,
23    ) -> Result<ProjectResponse, ClientError> {
24        let project_data = CreateProjectRequest {
25            name: project_name.to_string(),
26            description: project_description.map(|desc| desc.to_string()),
27        };
28
29        self.post_json::<CreateProjectRequest, ProjectResponse>(url, Some(project_data))
30    }
31
32    pub fn create_user_project(
33        &self,
34        project_name: &str,
35        project_description: Option<&str>,
36    ) -> Result<ProjectResponse, ClientError> {
37        let url = self.join("user/projects");
38        self.create_project(project_name, project_description, url)
39    }
40
41    pub fn get_project(
42        &self,
43        owner_name: &str,
44        project_name: &str,
45    ) -> Result<ProjectResponse, ClientError> {
46        let url = self.join(&format!("projects/{owner_name}/{project_name}"));
47
48        self.get_json::<ProjectResponse>(url)
49    }
50
51    pub fn create_organization_project(
52        &self,
53        owner_name: &str,
54        project_name: &str,
55        project_description: Option<&str>,
56    ) -> Result<ProjectResponse, ClientError> {
57        let url = self.join(&format!("organizations/{owner_name}/projects"));
58        self.create_project(project_name, project_description, url)
59    }
60
61    pub fn publish_project_version_urls(
62        &self,
63        owner_name: &str,
64        project_name: &str,
65        target_package_name: &str,
66        code_metadata: BurnCentralCodeMetadataRequest,
67        crates_metadata: Vec<CrateVersionMetadataRequest>,
68        digest: &str,
69    ) -> Result<CodeUploadUrlsResponse, ClientError> {
70        let url = self.join(&format!("projects/{owner_name}/{project_name}/code/upload"));
71
72        self.post_json(
73            url,
74            Some(CodeUploadRequest {
75                target_package_name: target_package_name.to_string(),
76                burn_central_metadata: code_metadata,
77                crates: crates_metadata,
78                digest: digest.to_string(),
79            }),
80        )
81    }
82
83    pub fn complete_project_version_upload(
84        &self,
85        owner_name: &str,
86        project_name: &str,
87        code_version_id: &str,
88    ) -> Result<(), ClientError> {
89        let url = self.join(&format!(
90            "projects/{owner_name}/{project_name}/code/{code_version_id}/complete"
91        ));
92
93        self.post(url, None::<()>)
94    }
95}