use crate::version::Version;
use chrono::{DateTime, Utc};
use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use strum::{Display, EnumString, IntoStaticStr};
#[derive(
Debug, Default, Clone, PartialEq, Eq, Display, Deserialize, Serialize, 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, PartialEq, Eq, Display, Deserialize, Serialize, EnumString, IntoStaticStr,
)]
pub enum AdapterStandard {
#[strum(serialize = "OnebotV11")]
OneBotV11,
#[strum(serialize = "OnebotV12")]
OneBotV12,
#[strum(serialize = "Oicq")]
Oicq,
#[strum(serialize = "Icqq")]
Icqq,
#[strum(serialize = "Other")]
#[default]
Other,
}
#[derive(
Debug, Default, Clone, PartialEq, Eq, Display, Deserialize, Serialize, EnumString, IntoStaticStr,
)]
pub enum AdapterProtocol {
#[strum(serialize = "QQBot")]
QQBot,
#[strum(serialize = "Icqq")]
Icqq,
#[strum(serialize = "Oicq")]
Oicq,
#[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, PartialEq, Eq, Display, Deserialize, Serialize, 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, PartialEq, Eq, Builder, Deserialize, Serialize)]
#[builder(setter(into))]
pub struct AdapterInfo {
#[builder(default)]
pub name: String,
#[builder(default)]
pub version: Version,
#[builder(default)]
pub platform: AdapterPlatform,
#[builder(default)]
pub standard: AdapterStandard,
#[builder(default)]
pub protocol: AdapterProtocol,
#[builder(default)]
pub communication: AdapterCommunication,
#[builder(default)]
pub address: Option<String>,
#[builder(default = "Self::default_connect_time()")]
pub connect_time: DateTime<Utc>,
#[builder(default)]
pub secret: Option<String>,
}
impl Default for AdapterInfo {
fn default() -> Self {
AdapterInfoBuilder::default().build().unwrap()
}
}
impl AdapterInfoBuilder {
fn default_connect_time() -> DateTime<Utc> {
Utc::now()
}
}
#[cfg(feature = "adapter")]
#[macro_export]
macro_rules! adapter_info {
( $( $key:ident : $value:expr ),* $(,)? ) => {{
let mut builder = $crate::adapter::AdapterInfoBuilder::default();
$(
builder.$key($value);
)*
builder.build().unwrap()
}};
() => {
$crate::adapter::AdapterInfoBuilder::default().build().unwrap()
};
}