#[cfg(feature = "http")]
use racal::Queryable;
use serde::{Deserialize, Serialize};
#[cfg(feature = "ws")]
use super::{RequestType, Requestable};
#[cfg(feature = "http")]
use crate::{
model::{ResponseDataWrapper, UserAuth},
query::NoAuthentication,
};
#[cfg(feature = "http")]
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
pub struct UserDetails {
pub user_id: crate::id::User,
}
#[cfg(feature = "http")]
impl Queryable<NoAuthentication, ResponseDataWrapper<crate::model::UserDetails>>
for UserDetails
{
fn url(&self, _: &NoAuthentication) -> String {
format!("{}/users/{}", crate::API_V1_HTTP_URL, &self.user_id)
}
}
#[cfg(feature = "http")]
#[derive(Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct LoginCredentials {
#[serde(rename = "username")]
pub email: String,
pub password: String,
}
#[cfg(feature = "http")]
impl std::fmt::Debug for LoginCredentials {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("LoginCredentials")
.field("email", &self.email)
.field("password", &"*****")
.finish()
}
}
#[derive(Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SavedLoginCredentials {
pub username: String,
#[serde(rename = "password")]
pub access_key: String,
}
impl std::fmt::Debug for SavedLoginCredentials {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("SavedLoginCredentials")
.field("username", &self.username)
.field("access_key", &"*****")
.finish()
}
}
#[cfg(feature = "http")]
impl From<UserAuth> for SavedLoginCredentials {
fn from(auth: UserAuth) -> Self {
Self { access_key: auth.access_key, username: auth.username }
}
}
impl From<&Self> for SavedLoginCredentials {
fn from(value: &Self) -> Self {
Self {
access_key: value.access_key.clone(),
username: value.username.clone(),
}
}
}
#[cfg(feature = "http")]
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
#[serde(tag = "auth_type")]
pub enum AuthType {
LoginProfile(LoginCredentials),
LoginCredentials(SavedLoginCredentials),
}
impl From<LoginCredentials> for AuthType {
fn from(value: LoginCredentials) -> Self { Self::LoginProfile(value) }
}
impl From<SavedLoginCredentials> for AuthType {
fn from(value: SavedLoginCredentials) -> Self {
Self::LoginCredentials(value)
}
}
#[cfg(feature = "http")]
impl Queryable<NoAuthentication, ResponseDataWrapper<UserAuth>> for AuthType {
fn url(&self, _: &NoAuthentication) -> String {
format!("{}/users/auth", crate::API_V1_HTTP_URL)
}
fn body(&self, _: &NoAuthentication) -> Option<serde_json::Result<Vec<u8>>> {
Some(serde_json::to_vec(self))
}
fn method(&self, _state: &NoAuthentication) -> racal::RequestMethod {
racal::RequestMethod::Post
}
}
#[cfg(feature = "ws")]
#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BlockUser {
pub id: crate::id::Invite,
}
#[cfg(feature = "ws")]
impl Requestable for BlockUser {
fn request_type(&self) -> RequestType { RequestType::BlockUser }
}
#[cfg(feature = "ws")]
#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UnBlockUser {
pub id: crate::id::Invite,
}
#[cfg(feature = "ws")]
impl Requestable for UnBlockUser {
fn request_type(&self) -> RequestType { RequestType::UnBlockUser }
}