use std::collections::HashMap; use crate::spotify_auth::Token; use crate::{spotify_types::*, BASE_URL}; pub async fn get_users( token: &Token, users: &[&SpotifyId], ) -> Result, reqwest::Error> { let unique_users = { let mut unique_users: Vec<_> = users.into(); unique_users.dedup(); unique_users }; let user_map = get_users_helper(token, &unique_users).await?; let out: Vec = users .iter() .filter_map(|spotify_id| user_map.get(spotify_id)) .cloned() .collect(); Ok(out) } async fn get_users_helper( token: &Token, unique_users: &[&SpotifyId], ) -> Result, reqwest::Error> { let client = reqwest::Client::new(); let mut map: HashMap = HashMap::new(); for user in unique_users { let res = client .get(BASE_URL.to_string() + "/users/" + &user.0) .bearer_auth(token.0.clone()) .query(&[("user_id", user.0.clone())]) .send() .await? .json::() .await?; map.insert(SpotifyId(user.0.clone()), res); } Ok(map) }