#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
pub struct UserId(pub String);
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
pub struct Agent(pub String);
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
pub struct Language(pub String);
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
pub enum Requestor {
Anonymous(String),
LoginUser(UserDetails),
JwtUser(UserDetails),
InnerService(UserDetails),
}
#[derive(
Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash,
)]
pub struct UserDetails {
pub user_id: String,
pub user_name: String,
pub nick_name: String,
pub user_role: String,
pub resource_id: String,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct UserInfo {
pub user_id: String,
pub user_name: String,
pub nick_name: String,
pub user_role: String,
pub head_image: String,
}
impl Requestor {
pub fn get_user(&self) -> Option<&UserDetails> {
match self {
Requestor::Anonymous(_) => None,
Requestor::LoginUser(user_detail) => Some(user_detail),
Requestor::JwtUser(user_detail) => Some(user_detail),
Requestor::InnerService(_) => todo!(),
}
}
pub fn user(&self) -> &UserDetails {
match self {
Requestor::Anonymous(_) => panic!("user not login!"),
Requestor::LoginUser(user_detail) => user_detail,
Requestor::JwtUser(user_detail) => user_detail,
Requestor::InnerService(_) => todo!(),
}
}
}
impl UserDetails {
pub fn user_id(&self) -> String {
self.user_id.to_string()
}
}
impl UserInfo {
pub fn build(user_details: &UserDetails) -> Self {
Self {
user_id: user_details.user_id.to_owned(),
user_name: user_details.user_name.to_owned(),
nick_name: user_details.nick_name.to_owned(),
user_role: user_details.user_role.to_owned(),
head_image: format!("/m/pp/{}", user_details.resource_id),
}
}
}
impl std::fmt::Display for UserId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
self.0.fmt(f)
}
}
impl std::fmt::Display for Agent {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
self.0.fmt(f)
}
}
impl std::fmt::Display for Language {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
self.0.fmt(f)
}
}