use serde::{Deserialize, Serialize}; use time::OffsetDateTime; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, sqlx::FromRow)] #[serde(rename_all = "camelCase")] pub struct User { pub id: uuid::Uuid, pub name: String, pub email: String, #[serde(default, skip_serializing)] pub password: String, pub created_at: Option, pub updated_at: Option, } #[derive(Debug, Serialize, Deserialize)] pub struct TokenClaims { pub sub: String, pub iat: usize, pub exp: usize, } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] pub struct RegisterSchema { pub name: String, pub email: String, #[serde(default, skip_serializing)] pub password: String, } #[derive(Debug, Serialize, Deserialize)] pub struct LoginSchema { pub email: String, #[serde(default, skip_serializing)] pub password: String, } macro_rules! impl_from_superset { ($from:tt, $to:ty, $($field:tt)*) => { impl From<$from> for $to { fn from(value: $from) -> Self { let $from { $($field)*, .. } = value; Self { $($field)*, } } } }; } impl_from_superset!(User, RegisterSchema, name, email, password); impl_from_superset!(User, LoginSchema, email, password); impl_from_superset!(RegisterSchema, LoginSchema, email, password);