use std::str::FromStr; use serde::{Deserialize, Serialize}; use sqlx::FromRow; use time::OffsetDateTime; use uuid::Uuid; use crate::Error; #[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize, FromRow)] #[serde(rename_all = "camelCase")] pub struct UserSchema { pub uuid: Uuid, pub name: String, pub email: String, #[serde(default, skip_serializing)] pub password_hash: String, pub created_at: Option, pub updated_at: Option, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct RegisterSchema { pub name: String, pub email: String, pub password: String, } impl RegisterSchema { pub fn validate(&self) -> Result<(), Error> { email_address::EmailAddress::from_str(&self.email)?; Ok(()) } } #[derive(Debug, Serialize, Deserialize)] pub struct LoginSchema { pub email: String, pub password: String, } impl From for LoginSchema { fn from(value: RegisterSchema) -> Self { let RegisterSchema { email, password, .. } = value; Self { email, password } } }