use chrono::prelude::*; use serde::{Deserialize, Serialize}; use sqlx::FromRow; use crate::core::*; use crate::util::crypto::PubKey; use crate::util::validate::{ResultBuilder, Validate}; pub type AccountId = Id; #[derive(Clone, Deserialize, Serialize, FromRow)] pub struct Account { pub id: AccountId, pub iri: Option, pub name: String, pub domain: String, pub display_name: Option, pub public_key: Option, pub created_at: NaiveDateTime, pub updated_at: NaiveDateTime, } pub struct NewAccount { pub iri: Option, pub name: String, pub domain: String, pub display_name: Option, pub public_key: Option, } impl From for AccountId { fn from(account: Account) -> AccountId { account.id } } impl Validate for NewAccount { fn validate(&self, builder: ResultBuilder) -> ResultBuilder { builder .field(&self.name, "name", |f| { f.check("Must not be empty", |v| !v.is_empty()) .check("Must be at most 16 characters long", |v| v.len() <= 16) }) .field(&self.display_name, "display_name", |f| { f.check("Must be at most 64 characters long", |v| { v.as_ref().map(|v| v.len()).unwrap_or(0) <= 64 }) }) } }