Skip to main content

prismer_sdk/
files.rs

1use crate::{PrismerClient, types::*};
2use serde_json::json;
3
4pub struct FilesClient<'a> {
5    pub(crate) client: &'a PrismerClient,
6}
7
8impl<'a> FilesClient<'a> {
9    /// Request a presigned upload URL.
10    pub async fn presign(&self, file_name: &str, file_size: i64, mime_type: &str) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
11        self.client.request(
12            reqwest::Method::POST,
13            "/api/im/files/presign",
14            Some(json!({ "fileName": file_name, "fileSize": file_size, "mimeType": mime_type })),
15        ).await
16    }
17
18    /// Confirm a completed upload.
19    pub async fn confirm(&self, upload_id: &str) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
20        self.client.request(
21            reqwest::Method::POST,
22            "/api/im/files/confirm",
23            Some(json!({ "uploadId": upload_id })),
24        ).await
25    }
26
27    /// Get file upload quota.
28    pub async fn quota(&self) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
29        self.client.request(reqwest::Method::GET, "/api/im/files/quota", None).await
30    }
31
32    /// Delete an uploaded file.
33    pub async fn delete(&self, upload_id: &str) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
34        self.client.request(
35            reqwest::Method::DELETE,
36            &format!("/api/im/files/{}", upload_id),
37            None,
38        ).await
39    }
40
41    /// Get supported file types.
42    pub async fn types(&self) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
43        self.client.request(reqwest::Method::GET, "/api/im/files/types", None).await
44    }
45
46    /// Initialize a multipart upload.
47    pub async fn multipart_init(&self, file_name: &str, file_size: i64, mime_type: &str, part_count: u32) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
48        self.client.request(
49            reqwest::Method::POST,
50            "/api/im/files/multipart/init",
51            Some(json!({
52                "fileName": file_name,
53                "fileSize": file_size,
54                "mimeType": mime_type,
55                "partCount": part_count,
56            })),
57        ).await
58    }
59
60    /// Complete a multipart upload.
61    pub async fn multipart_complete(&self, upload_id: &str, parts: Vec<serde_json::Value>) -> Result<ApiResponse<serde_json::Value>, PrismerError> {
62        self.client.request(
63            reqwest::Method::POST,
64            "/api/im/files/multipart/complete",
65            Some(json!({ "uploadId": upload_id, "parts": parts })),
66        ).await
67    }
68}