gewe_http/video_account/
scan.rs1use 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}