burn_central_client/project/
mod.rs1pub 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}