use std::collections::HashMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct User {
pub owner: String,
pub name: String,
pub created_time: String,
pub updated_time: String,
pub id: String,
pub r#type: String,
pub password: String,
pub password_salt: String,
pub display_name: String,
pub avatar: String,
pub permanent_avatar: String,
pub email: String,
pub phone: String,
pub location: String,
pub address: Vec<String>,
pub affiliation: String,
pub title: String,
pub id_card_type: String,
pub id_card: String,
pub homepage: String,
pub bio: String,
pub tag: String,
pub region: String,
pub language: String,
pub gender: String,
pub birthday: String,
pub education: String,
pub score: i32,
pub karma: i32,
pub ranking: i32,
pub is_default_avatar: bool,
pub is_online: bool,
pub is_admin: bool,
pub is_global_admin: bool,
pub is_forbidden: bool,
pub is_deleted: bool,
pub email_verified: bool,
pub signup_application: String,
pub hash: String,
pub pre_hash: String,
pub created_ip: String,
pub last_signin_time: String,
pub last_signin_ip: String,
pub github: String,
pub google: String,
pub qq: String,
pub wechat: String,
pub facebook: String,
pub dingtalk: String,
pub weibo: String,
pub gitee: String,
pub linkedin: String,
pub wecom: String,
pub lark: String,
pub gitlab: String,
pub ldap: String,
pub properties: HashMap<String, String>,
}
impl User {
pub fn new() -> Self {
let mut tmp = User::default();
tmp.is_admin = false;
tmp.is_deleted = false;
tmp.is_global_admin = false;
tmp.is_default_avatar = true;
tmp.is_online = false;
tmp.is_forbidden = false;
tmp
}
}
#[macro_export]
macro_rules! user {
($ori_user: ident, $($p:ident = $e:expr), *) => {
$crate::user::User {
$(
$p: $e,
)*
..$ori_user.clone()
}
};
($($p:ident = $e:expr), *) => {
$crate::user::User {
$(
$p: $e,
)*
.. $crate::user::User::new()
}
}
}