gewe_http/moments/
media.rs1use crate::client::GeweHttpClient;
2use gewe_core::{
3 DownloadSnsVideoRequest, DownloadSnsVideoResponse, GeweError, UploadSnsImageRequest,
4 UploadSnsImageResponse, UploadSnsVideoRequest, UploadSnsVideoResponse,
5};
6use tracing::instrument;
7
8impl GeweHttpClient {
9 #[instrument(skip(self))]
10 pub async fn upload_sns_image(
11 &self,
12 req: UploadSnsImageRequest<'_>,
13 ) -> Result<UploadSnsImageResponse, GeweError> {
14 let env = self
15 .post_api::<_, UploadSnsImageResponse>("gewe/v2/api/sns/uploadSnsImage", &req)
16 .await?;
17 env.data.ok_or(GeweError::MissingData)
18 }
19
20 #[instrument(skip(self))]
21 pub async fn upload_sns_video(
22 &self,
23 req: UploadSnsVideoRequest<'_>,
24 ) -> Result<UploadSnsVideoResponse, GeweError> {
25 let env = self
26 .post_api::<_, UploadSnsVideoResponse>("gewe/v2/api/sns/uploadSnsVideo", &req)
27 .await?;
28 env.data.ok_or(GeweError::MissingData)
29 }
30
31 #[instrument(skip(self))]
32 pub async fn download_sns_video(
33 &self,
34 req: DownloadSnsVideoRequest<'_>,
35 ) -> Result<DownloadSnsVideoResponse, GeweError> {
36 let env = self
37 .post_api::<_, DownloadSnsVideoResponse>("gewe/v2/api/sns/downloadSnsVideo", &req)
38 .await?;
39 env.data.ok_or(GeweError::MissingData)
40 }
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn test_upload_sns_image_request() {
49 let req = UploadSnsImageRequest {
50 app_id: "test_app",
51 img_urls: vec!["https://example.com/image.jpg"],
52 };
53 let json = serde_json::to_string(&req).expect("Failed to serialize");
54 assert!(json.contains("appId"));
55 assert!(json.contains("imgUrls"));
56 }
57
58 #[test]
59 fn test_upload_sns_video_request() {
60 let req = UploadSnsVideoRequest {
61 app_id: "test_app",
62 thumb_url: "https://example.com/thumb.jpg",
63 video_url: "https://example.com/video.mp4",
64 };
65 let json = serde_json::to_string(&req).expect("Failed to serialize");
66 assert!(json.contains("appId"));
67 assert!(json.contains("videoUrl"));
68 assert!(json.contains("thumbUrl"));
69 }
70
71 #[test]
72 fn test_download_sns_video_request() {
73 let req = DownloadSnsVideoRequest {
74 app_id: "test_app",
75 sns_xml: "<xml>test</xml>",
76 };
77 let json = serde_json::to_string(&req).expect("Failed to serialize");
78 assert!(json.contains("appId"));
79 assert!(json.contains("snsXml"));
80 }
81}