use crate::Maybe;
use serde::{Deserialize, Serialize};
#[cfg(feature = "openapi")]
use utoipa::ToSchema;
#[derive(Clone, Debug, Deserialize)]
#[cfg_attr(feature = "client", derive(Serialize))]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct CreateUserPayload {
pub username: String,
#[cfg_attr(feature = "openapi", schema(format = "email"))]
pub email: String,
#[cfg_attr(feature = "openapi", schema(format = "password"))]
pub password: String,
}
#[derive(Clone, Debug, Serialize)]
#[cfg_attr(feature = "client", derive(Deserialize))]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct CreateUserResponse {
pub id: u64,
pub token: String,
}
#[derive(Clone, Debug, Deserialize)]
#[cfg_attr(feature = "client", derive(Serialize))]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct DeleteUserPayload {
#[cfg_attr(feature = "openapi", schema(format = "password"))]
pub password: String,
}
#[derive(Clone, Debug, Deserialize)]
#[cfg_attr(feature = "client", derive(Serialize))]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct ChangePasswordPayload {
pub current_password: String,
pub new_password: String,
}
#[derive(Clone, Debug, Deserialize)]
#[cfg_attr(feature = "client", derive(Serialize))]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct ChangeEmailPayload {
pub password: String,
pub new_email: String,
}
#[derive(Clone, Debug, Deserialize)]
#[cfg_attr(feature = "client", derive(Serialize))]
#[cfg_attr(feature = "openapi", derive(ToSchema))]
pub struct EditUserPayload {
pub username: Option<String>,
#[serde(default)]
#[cfg_attr(feature = "client", serde(skip_serializing_if = "Maybe::is_absent"))]
#[cfg_attr(feature = "openapi", schema(nullable, value_type = Option<String>, format = Byte))]
pub avatar: Maybe<String>,
#[serde(default)]
#[cfg_attr(feature = "client", serde(skip_serializing_if = "Maybe::is_absent"))]
#[cfg_attr(feature = "openapi", schema(nullable, value_type = Option<String>))]
pub banner: Maybe<String>,
#[serde(default)]
#[cfg_attr(feature = "client", serde(skip_serializing_if = "Maybe::is_absent"))]
#[cfg_attr(feature = "openapi", schema(nullable, value_type = Option<String>))]
pub bio: Maybe<String>,
}