tiktokapi_v2/
apis.rs

1pub mod get_v2_user_info;
2pub mod post_v2_video_list;
3pub mod post_v2_video_query;
4
5use crate::error::Error;
6use reqwest::RequestBuilder;
7use serde::de::DeserializeOwned;
8
9pub async fn execute_api<T>(builder: RequestBuilder) -> Result<T, Error>
10where
11    T: DeserializeOwned,
12{
13    let response = builder.send().await?;
14    let status_code = response.status();
15
16    if status_code.is_success() {
17        Ok(response.json::<T>().await?)
18    } else {
19        let text = match response.text().await {
20            Ok(text) => text,
21            Err(err) => return Err(Error::Other(format!("{:?}", err), status_code)),
22        };
23
24        let json = match serde_json::from_str::<serde_json::Value>(&text) {
25            Ok(json) => json,
26            Err(_err) => return Err(Error::Other(text, status_code)),
27        };
28
29        match serde_json::from_value::<crate::responses::error::Error>(json["error"].clone()) {
30            Ok(err) => Err(Error::Api(err, status_code)),
31            Err(_) => Err(Error::Other(text, status_code)),
32        }
33    }
34}