use super::{Role, Sender, Sex};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct GroupSender {
pub user_id: String,
pub nick: Option<String>,
pub sex: Sex,
pub age: u8,
pub role: Role,
pub card: Option<String>,
pub level: Option<String>,
pub title: Option<String>,
}
impl GroupSender {
pub fn role(&self) -> Role {
self.role.clone()
}
pub fn card(&self) -> Option<&str> {
self.card.as_deref()
}
pub fn level(&self) -> Option<&str> {
self.level.as_deref()
}
pub fn title(&self) -> Option<&str> {
self.title.as_deref()
}
}
impl Sender for GroupSender {
fn user_id(&self) -> &str {
self.user_id.as_str()
}
fn name(&self) -> Option<&str> {
self.nick.as_deref()
}
fn sex(&self) -> Sex {
self.sex.clone()
}
fn age(&self) -> u8 {
self.age
}
}
#[macro_export]
macro_rules! group_sender {
(
user_id: $user_id:expr,
nick: $nick:expr,
sex: $sex:expr,
age: $age:expr,
role: $role:expr,
card: $card:expr,
level: $level:expr,
title: $title:expr
) => {
GroupSender {
user_id: $user_id.to_string(),
nick: Some($nick.to_string()),
sex: $sex,
age: $age,
role: $role,
card: Some($card.to_string()),
level: Some($level.to_string()),
title: Some($title.to_string()),
}
};
(
user_id: $user_id:expr,
nick: $nick:expr,
sex: $sex:expr,
age: $age:expr,
role: $role:expr,
card: $card:expr,
level: $level:expr
) => {
GroupSender {
user_id: $user_id.to_string(),
nick: Some($nick.to_string()),
sex: $sex,
age: $age,
role: $role,
card: Some($card.to_string()),
level: Some($level.to_string()),
title: None,
}
};
(
user_id: $user_id:expr,
nick: $nick:expr,
sex: $sex:expr,
age: $age:expr,
role: $role:expr,
card: $card:expr
) => {
GroupSender {
user_id: $user_id.to_string(),
nick: Some($nick.to_string()),
sex: $sex,
age: $age,
role: $role,
card: Some($card.to_string()),
level: None,
title: None,
}
};
(
user_id: $user_id:expr,
nick: $nick:expr,
sex: $sex:expr,
age: $age:expr,
role: $role:expr
) => {
GroupSender {
user_id: $user_id.to_string(),
nick: Some($nick.to_string()),
sex: $sex,
age: $age,
role: $role,
card: None,
level: None,
title: None,
}
};
($user_id:expr, $nick:expr, $sex:expr, $age:expr) => {
GroupSender {
user_id: $user_id.to_string(),
nick: Some($nick.to_string()),
sex: $sex,
age: $age,
role: Role::Unknown,
card: None,
level: None,
title: None,
}
};
($user_id:expr, $nick:expr, $sex:expr) => {
GroupSender {
user_id: $user_id.to_string(),
nick: Some($nick.to_string()),
sex: $sex,
age: 0,
role: Role::Unknown,
card: None,
level: None,
title: None,
}
};
($user_id:expr, $nick:expr) => {
GroupSender {
user_id: $user_id.to_string(),
nick: Some($nick.to_string()),
sex: Sex::Unknown,
age: 0,
role: Role::Unknown,
card: None,
level: None,
title: None,
}
};
($user_id:expr) => {
GroupSender {
user_id: $user_id.to_string(),
nick: None,
sex: Sex::Unknown,
age: 0,
role: Role::Unknown,
card: None,
level: None,
title: None,
}
};
}