tiktokapi_v2/responses/
error.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashSet;
3
4#[derive(Serialize, Deserialize, Debug, Clone, Default)]
5pub struct Error {
6    #[serde(skip_serializing_if = "Option::is_none")]
7    pub code: Option<Code>,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub message: Option<String>,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub log_id: Option<String>,
12    #[serde(flatten)]
13    pub extra: std::collections::HashMap<String, serde_json::Value>,
14}
15
16impl Error {
17    pub fn is_empty_extra(&self) -> bool {
18        let res = self.extra.is_empty();
19        if !res {
20            println!("Error {:?}", self.extra);
21        }
22        res
23    }
24}
25
26#[derive(Serialize, Deserialize, Debug, Clone)]
27pub enum Code {
28    #[serde(rename = "ok")]
29    Ok,
30    #[serde(rename = "access_token_invalid")]
31    AccessTokenInvalid,
32    #[serde(rename = "internal_error")]
33    InternalError,
34    #[serde(rename = "invalid_file_upload")]
35    InvalidFileUpload,
36    #[serde(rename = "invalid_params")]
37    InvalidParams,
38    #[serde(rename = "rate_limit_exceeded")]
39    RateLimitExceeded,
40    #[serde(rename = "scope_not_authorized")]
41    ScopeNotAuthorized,
42    #[serde(rename = "scope_permission_missed")]
43    ScopePermissionMissed,
44}
45
46impl std::fmt::Display for Code {
47    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
48        match self {
49            Self::Ok => write!(f, "ok"),
50            Self::AccessTokenInvalid => write!(f, "access_token_invalid"),
51            Self::InternalError => write!(f, "internal_error"),
52            Self::InvalidFileUpload => write!(f, "invalid_file_upload"),
53            Self::InvalidParams => write!(f, "invalid_params"),
54            Self::RateLimitExceeded => write!(f, "rate_limit_exceeded"),
55            Self::ScopeNotAuthorized => write!(f, "scope_not_authorized"),
56            Self::ScopePermissionMissed => write!(f, "scope_permission_missed"),
57        }
58    }
59}
60
61impl Default for Code {
62    fn default() -> Self {
63        Self::Ok
64    }
65}
66
67#[derive(Debug, Clone, Eq, Hash, PartialEq)]
68pub enum ErrorField {
69    Code,
70    Message,
71    LogId,
72}
73
74impl ErrorField {
75    pub fn all() -> HashSet<Self> {
76        let mut set = HashSet::new();
77        set.insert(ErrorField::Code);
78        set.insert(ErrorField::Message);
79        set.insert(ErrorField::LogId);
80        set
81    }
82}
83
84impl std::fmt::Display for ErrorField {
85    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
86        match self {
87            Self::Code => write!(f, "code"),
88            Self::Message => write!(f, "message"),
89            Self::LogId => write!(f, "log_id"),
90        }
91    }
92}