gewe_http/video_account/
scan.rs

1use crate::client::GeweHttpClient;
2use gewe_core::{
3    GeweError, ScanBrowseRequest, ScanCommentRequest, ScanCommentResponse, ScanFavRequest,
4    ScanFollowRequest, ScanFollowResponse, ScanLikeRequest, ScanLoginChannelsRequest,
5    ScanLoginChannelsResponse, ScanQrCodeRequest, ScanQrCodeResponse,
6};
7use tracing::instrument;
8
9impl GeweHttpClient {
10    #[instrument(skip(self))]
11    pub async fn scan_follow(
12        &self,
13        req: ScanFollowRequest<'_>,
14    ) -> Result<ScanFollowResponse, GeweError> {
15        let env = self
16            .post_api::<_, ScanFollowResponse>("gewe/v2/api/finder/scanFollow", &req)
17            .await?;
18        env.data.ok_or(GeweError::MissingData)
19    }
20
21    #[instrument(skip(self))]
22    pub async fn scan_browse(&self, req: ScanBrowseRequest<'_>) -> Result<(), GeweError> {
23        self.post_api::<_, serde_json::Value>("gewe/v2/api/finder/scanBrowse", &req)
24            .await?;
25        Ok(())
26    }
27
28    #[instrument(skip(self))]
29    pub async fn scan_like(&self, req: ScanLikeRequest<'_>) -> Result<(), GeweError> {
30        self.post_api::<_, serde_json::Value>("gewe/v2/api/finder/scanLike", &req)
31            .await?;
32        Ok(())
33    }
34
35    #[instrument(skip(self))]
36    pub async fn scan_fav(&self, req: ScanFavRequest<'_>) -> Result<(), GeweError> {
37        self.post_api::<_, serde_json::Value>("gewe/v2/api/finder/scanFav", &req)
38            .await?;
39        Ok(())
40    }
41
42    #[instrument(skip(self))]
43    pub async fn scan_comment(
44        &self,
45        req: ScanCommentRequest<'_>,
46    ) -> Result<ScanCommentResponse, GeweError> {
47        let env = self
48            .post_api::<_, ScanCommentResponse>("gewe/v2/api/finder/scanComment", &req)
49            .await?;
50        env.data.ok_or(GeweError::MissingData)
51    }
52
53    #[instrument(skip(self))]
54    pub async fn scan_qr_code(
55        &self,
56        req: ScanQrCodeRequest<'_>,
57    ) -> Result<ScanQrCodeResponse, GeweError> {
58        let env = self
59            .post_api::<_, ScanQrCodeResponse>("gewe/v2/api/finder/scanQrCode", &req)
60            .await?;
61        env.data.ok_or(GeweError::MissingData)
62    }
63
64    #[instrument(skip(self))]
65    pub async fn scan_login_channels(
66        &self,
67        req: ScanLoginChannelsRequest<'_>,
68    ) -> Result<ScanLoginChannelsResponse, GeweError> {
69        let env = self
70            .post_api::<_, ScanLoginChannelsResponse>("gewe/v2/api/finder/scanLoginChannels", &req)
71            .await?;
72        env.data.ok_or(GeweError::MissingData)
73    }
74}
75
76#[cfg(test)]
77mod tests {
78    use super::*;
79
80    #[test]
81    fn test_scan_follow_request() {
82        let req = ScanFollowRequest {
83            app_id: "test_app",
84            proxy_ip: "",
85            my_user_name: "my_user",
86            my_role_type: 1,
87            qr_content: "qr_content",
88            object_id: "obj_123",
89            object_nonce_id: "nonce_123",
90        };
91        let json = serde_json::to_string(&req).expect("Failed to serialize");
92        assert!(json.contains("appId"));
93        assert!(json.contains("myUserName"));
94        assert!(json.contains("qrContent"));
95    }
96
97    #[test]
98    fn test_scan_like_request() {
99        let req = ScanLikeRequest {
100            app_id: "test_app",
101            my_user_name: "my_user",
102            my_role_type: 1,
103            qr_content: "qr_content",
104            object_id: 123456,
105        };
106        let json = serde_json::to_string(&req).expect("Failed to serialize");
107        assert!(json.contains("appId"));
108        assert!(json.contains("objectId"));
109    }
110
111    #[test]
112    fn test_scan_comment_request() {
113        let req = ScanCommentRequest {
114            app_id: "test_app",
115            my_user_name: "my_user",
116            my_role_type: 1,
117            qr_content: "qr_content",
118            object_id: 123456,
119            comment_content: "Comment content",
120            reply_username: None,
121            ref_comment_id: None,
122            root_comment_id: None,
123        };
124        let json = serde_json::to_string(&req).expect("Failed to serialize");
125        assert!(json.contains("appId"));
126        assert!(json.contains("commentContent"));
127    }
128
129    #[test]
130    fn test_scan_qr_code_request() {
131        let req = ScanQrCodeRequest {
132            app_id: "test_app",
133            my_user_name: "my_user",
134            my_role_type: 1,
135            qr_content: "qr_code_data",
136        };
137        let json = serde_json::to_string(&req).expect("Failed to serialize");
138        assert!(json.contains("appId"));
139        assert!(json.contains("qrContent"));
140    }
141}