diff --git a/src/lib.rs b/src/lib.rs index 50bc1b5..bed7751 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,3 +4,9 @@ pub mod envy; pub mod message; pub mod token; pub mod user; + +pub mod init { + pub fn is_uuid_nil(uuid: &uuid::Uuid) -> bool { + uuid.is_nil() + } +} diff --git a/src/user/mod.rs b/src/user/mod.rs index 9f883d6..fc72f0f 100644 --- a/src/user/mod.rs +++ b/src/user/mod.rs @@ -14,6 +14,8 @@ pub struct User { pub created: Option, #[serde(with = "time::serde::rfc3339::option")] pub last_login: Option, + #[serde(skip)] + pub salt_id: uuid::Uuid, } #[derive(Clone, Debug, Default, Deserialize, Serialize)] @@ -26,6 +28,8 @@ pub struct ServiceUser { // When serializing to json, if empty do not populate #[serde(with = "time::serde::rfc3339::option")] pub last_login: Option, + #[serde(skip)] + pub salt_id: uuid::Uuid, } #[derive(Clone, Debug, Default, Deserialize, Serialize)] @@ -65,6 +69,24 @@ pub struct UserProfile { pub last_login: Option, } +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct Salt { + #[serde(skip_serializing_if = "crate::init::is_uuid_nil")] + pub id: uuid::Uuid, + #[serde(skip_serializing_if = "String::is_empty")] + pub salt: String, +} + +impl Salt { + pub fn to_json(&self, output_pretty: bool) -> Result { + if output_pretty { + serde_json::to_string_pretty(&self) + } else { + serde_json::to_string(&self) + } + } +} + pub fn init_user_profile(usr: &User) -> UserProfile { UserProfile { user_id: usr.id,