use strum::{Display, EnumString, IntoStaticStr};
use crate::version::Version;
#[derive(Debug, Default, Clone, Display, EnumString, IntoStaticStr)]
pub enum AdapterPlatform {
#[strum(serialize = "qq")]
QQ,
#[strum(serialize = "wechat")]
Wechat,
#[strum(serialize = "telegram")]
Telegram,
#[strum(serialize = "discord")]
Discord,
#[strum(serialize = "kook")]
Kook,
#[strum(serialize = "other")]
#[default]
Other,
}
#[derive(Debug, Default, Clone, Display, EnumString, IntoStaticStr)]
pub enum AdapterStandard {
#[strum(serialize = "Onebot v11")]
OneBotV11,
#[strum(serialize = "Onebot v12")]
OneBotV12,
#[strum(serialize = "OICQ")]
Oicq,
#[strum(serialize = "ICQQ")]
Icqq,
#[strum(serialize = "Other")]
#[default]
Other,
}
#[derive(Debug, Default, Clone, Display, EnumString, IntoStaticStr)]
pub enum AdapterProtocol {
#[strum(serialize = "QQBot")]
QQBot,
#[strum(serialize = "Icqq")]
Icqq,
#[strum(serialize = "GoCqHttp")]
GoCqHttp,
#[strum(serialize = "NapCat")]
NapCat,
#[strum(serialize = "LLOneBot")]
LLOneBot,
#[strum(serialize = "Conwechat")]
Conwechat,
#[strum(serialize = "Lagrange")]
Lagrange,
#[strum(serialize = "Console")]
Console,
#[strum(serialize = "Other")]
#[default]
Other,
}
#[derive(Debug, Default, Clone, Display, EnumString, IntoStaticStr)]
pub enum AdapterCommunication {
#[strum(serialize = "Http")]
Http,
#[strum(serialize = "WebSocketServer")]
WebSocketServer,
#[strum(serialize = "WebSocketClient")]
WebSocketClient,
#[strum(serialize = "Grpc")]
Grpc,
#[default]
#[strum(serialize = "Other")]
Other,
}
#[derive(Debug, Clone)]
pub struct AdapterInfo {
pub name: String,
pub version: Version,
pub platform: AdapterPlatform,
pub standard: AdapterStandard,
pub protocol: AdapterProtocol,
pub communication: AdapterCommunication,
pub address: Option<String>,
pub connect_time: u64,
}
#[cfg(feature = "adapter")]
#[macro_export]
macro_rules! adapter_info {
(name: $name:expr, version: $version:expr, platform: $platform:expr, standard: $standard:expr, protocol: $protocol:expr, communication: $communication:expr, address: $address:expr, connect_time: $connect_time:expr) => {
AdapterInfo {
name: $name.to_string(),
version: $version.into(),
platform: $platform,
standard: $standard,
protocol: $protocol,
communication: $communication,
address: Some($address.to_string()),
connect_time: $connect_time,
}
};
(name: $name:expr, platform: $platform:expr, standard: $standard:expr, protocol: $protocol:expr, communication: $communication:expr, address: $address:expr, connect_time: $connect_time:expr) => {
AdapterInfo {
name: $name.to_string(),
version: env!("CARGO_PKG_VERSION").into(),
platform: $platform,
standard: $standard,
protocol: $protocol,
communication: $communication,
address: Some($address.to_string()),
connect_time: $connect_time,
}
};
(name: $name:expr, version: $version:expr, platform: $platform:expr, standard: $standard:expr, protocol: $protocol:expr, communication: $communication:expr, connect_time: $connect_time:expr) => {
AdapterInfo {
name: $name.to_string(),
version: $version.into(),
platform: $platform,
standard: $standard,
protocol: $protocol,
communication: $communication,
address: None,
connect_time: $connect_time,
}
};
(name: $name:expr, platform: $platform:expr, standard: $standard:expr, protocol: $protocol:expr, communication: $communication:expr, connect_time: $connect_time:expr) => {
AdapterInfo {
name: $name.to_string(),
version: env!("CARGO_PKG_VERSION").into(),
platform: $platform,
standard: $standard,
protocol: $protocol,
communication: $communication,
address: None,
connect_time: $connect_time,
}
};
}