use serde::{Deserialize, Serialize};
use utoipa::{ToResponse, ToSchema};
use uuid::Uuid;
#[derive(
Clone, Debug, Deserialize, Serialize, Eq, PartialEq, ToSchema, ToResponse,
)]
#[serde(rename_all = "camelCase")]
pub enum IDSource {
User,
Account,
}
#[derive(
Clone, Debug, Deserialize, Serialize, Eq, PartialEq, ToSchema, ToResponse,
)]
#[serde(rename_all = "camelCase")]
pub struct WrittenBy {
pub id: Uuid,
pub from: IDSource,
}
impl WrittenBy {
fn new(id: Uuid, from: IDSource) -> Self {
Self { id, from }
}
pub fn new_from_user(id: Uuid) -> Self {
Self::new(id, IDSource::User)
}
pub fn new_from_account(id: Uuid) -> Self {
Self::new(id, IDSource::Account)
}
pub fn new_anemic() -> Self {
Self::new(Uuid::nil(), IDSource::Account)
}
}
impl Default for WrittenBy {
fn default() -> Self {
Self::new_anemic()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default() {
let updated_by = WrittenBy::default();
println!("updated_by: {:?}", updated_by);
assert_eq!(updated_by.id, Uuid::nil());
assert_eq!(updated_by.from, IDSource::Account);
}
}