use serde::{de::DeserializeOwned, Deserialize, Serialize};
use crate::{errors::TsarError, Client};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
pub id: String,
pub name: Option<String>,
pub avatar: Option<String>,
pub subscription: Subscription,
pub session: String,
pub session_key: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Subscription {
pub id: String,
pub tier: u32,
pub expires: Option<u64>,
}
impl User {
pub fn heartbeat(&self) -> Result<(), TsarError> {
self.user_api_call("heartbeat")
}
pub fn user_api_call<T: DeserializeOwned>(&self, path: &str) -> Result<T, TsarError> {
let params = vec![("session", self.session.as_str())];
Client::encrypted_api_call::<T>(path, &self.session_key, params)
}
}