twitter_api_v2/objects/
error.rs

1// https://developer.twitter.com/en/support/twitter-api/error-troubleshooting
2
3use serde::{Deserialize, Serialize};
4use serde_json::{Map, Value};
5
6//
7#[derive(Deserialize, Serialize, Debug, Clone)]
8pub struct Error {
9    pub r#type: String,
10    pub title: String,
11    pub detail: String,
12    #[serde(flatten)]
13    pub _others: Map<String, Value>,
14}
15
16#[cfg(test)]
17mod tests {
18    use super::*;
19
20    #[test]
21    fn test_de_error() {
22        let json = r#"
23        {
24            "client_id": "101010101",
25            "required_enrollment": "Standard Basic",
26            "registration_url": "https://developer.twitter.com/en/account",
27            "title": "Client Forbidden",
28            "detail": "This request must be made using an approved developer account that is enrolled in the requested endpoint. Learn more by visiting our documentation.",
29            "reason": "client-not-enrolled",
30            "type": "https://api.twitter.com/2/problems/client-forbidden"
31        }
32        "#;
33        match serde_json::from_str::<Error>(json) {
34            Ok(error) => {
35                assert_eq!(error.title, "Client Forbidden");
36            }
37            Err(err) => panic!("{err}"),
38        }
39
40        //
41        match serde_json::from_str::<Error>(include_str!(
42            "../../tests/response_body_json_files/tweets__manage_tweets__create__err.json"
43        )) {
44            Ok(error) => {
45                assert_eq!(error.title, "Invalid Request");
46            }
47            Err(err) => panic!("{err}"),
48        }
49    }
50}