1use super::types::*;
2use crate::client::{AuthType, Client};
3use crate::error::ApiResult;
4
5pub trait FileApi {
6 fn upload_work_item_file(
9 &self,
10 request: UploadWorkItemFileRequest,
11 auth: AuthType,
12 ) -> impl std::future::Future<Output = ApiResult<UploadWorkItemFileResponse>> + Send;
13
14 fn upload_file(
17 &self,
18 request: UploadFileRequest,
19 auth: AuthType,
20 ) -> impl std::future::Future<Output = ApiResult<UploadFileResponse>> + Send;
21
22 fn download_work_item_file(
25 &self,
26 request: DownloadWorkItemFileRequest,
27 auth: AuthType,
28 ) -> impl std::future::Future<Output = ApiResult<DownloadWorkItemFileResponse>> + Send;
29
30 fn delete_file(
33 &self,
34 request: DeleteFileRequest,
35 auth: AuthType,
36 ) -> impl std::future::Future<Output = ApiResult<DeleteFileResponse>> + Send;
37}
38
39impl FileApi for Client {
40 async fn upload_work_item_file(
41 &self,
42 request: UploadWorkItemFileRequest,
43 auth: AuthType,
44 ) -> ApiResult<UploadWorkItemFileResponse> {
45 let url = format!(
46 "{}/work_item/{}/{}/file/upload",
47 request.project_key, request.work_item_type_key, request.work_item_id
48 );
49
50 Ok(self.post_multipart(&url, request, auth).await?)
51 }
52
53 async fn upload_file(
54 &self,
55 request: UploadFileRequest,
56 auth: AuthType,
57 ) -> ApiResult<UploadFileResponse> {
58 let url = format!("{}/file/upload", request.project_key);
59
60 Ok(self.post_multipart(&url, request, auth).await?)
61 }
62
63 async fn download_work_item_file(
64 &self,
65 request: DownloadWorkItemFileRequest,
66 auth: AuthType,
67 ) -> ApiResult<DownloadWorkItemFileResponse> {
68 let url = format!(
69 "{}/work_item/{}/{}/file/download",
70 request.project_key, request.work_item_type_key, request.work_item_id
71 );
72
73 Ok(self.post_binary(&url, request, auth).await?)
74 }
75
76 async fn delete_file(
77 &self,
78 request: DeleteFileRequest,
79 auth: AuthType,
80 ) -> ApiResult<DeleteFileResponse> {
81 Ok(self.post("/file/delete", request, auth).await?)
82 }
83}