gewe_http/moments/
media.rs

1use 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}