twitter_api_v2/endpoints/users/
lookup.rs

1// https://developer.twitter.com/en/docs/twitter-api/users/lookup/introduction
2
3use serde::{Deserialize, Serialize};
4
5use crate::objects::User;
6
7//
8// TODO,
9
10//
11pub fn url_for_user_by_id(id: u64) -> String {
12    format!("https://api.twitter.com/2/users/{id}")
13}
14
15pub fn url_for_user_by_username(username: impl AsRef<str>) -> String {
16    let username = username.as_ref();
17    format!("https://api.twitter.com/2/users/by/username/{username}")
18}
19
20//
21#[derive(Deserialize, Serialize, Debug, Clone)]
22pub struct SingleUserResponseBody {
23    pub data: User,
24}
25
26#[derive(Deserialize, Serialize, Debug, Clone)]
27pub struct MultipleUsersResponseBody {
28    pub data: Vec<User>,
29}
30
31#[cfg(test)]
32mod tests {
33    use super::*;
34
35    #[test]
36    fn test_de_response_body() {
37        match serde_json::from_str::<SingleUserResponseBody>(include_str!(
38            "../../../tests/response_body_json_files/users__lookup__me__default_fields.json"
39        )) {
40            Ok(body) => {
41                assert_eq!(body.data.id.unwrap(), 2244994945);
42            }
43            Err(err) => panic!("{err}"),
44        }
45
46        match serde_json::from_str::<SingleUserResponseBody>(include_str!(
47            "../../../tests/response_body_json_files/users__lookup__me__optional_fields.json"
48        )) {
49            Ok(body) => {
50                println!("{body:?}");
51                assert_eq!(body.data.id.unwrap(), 2244994945);
52            }
53            Err(err) => panic!("{err}"),
54        }
55    }
56}