use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::{Client, Result};
#[derive(Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct User {
pub id: String,
pub uuid: String,
pub student_id: String,
pub user_name: String,
pub given_name: String,
pub email_address: String,
}
impl Client {
pub fn me(&self) -> Result<User> {
self.get("learn/api/v1/users/me")
}
pub fn my_favourites(&self) -> Result<Vec<String>> {
let resp: FavCoursesResp =
self.get("learn/api/v1/users/me/preferences/favorite.courses")?;
let inner: FavCoursesInner = serde_json::from_str(&resp.value)?;
Ok(inner
.into_iter()
.filter(|(_, v)| *v)
.map(|(k, _)| k)
.collect())
}
}
#[derive(Debug, Deserialize)]
struct FavCoursesResp {
value: String,
}
type FavCoursesInner = HashMap<String, bool>;