pub use self::{
ks_login::{KuaiShouLogin, KuaiShouLoginResponse},
tt_login::{TikTokLogin, TikTokLoginResponse, TikTokLoginResponseData},
wx_login::{WechatLogin, WechatLoginResponse},
};
use crate::GameError;
use poem_openapi::{Enum, Object};
use serde::{Deserialize, Serialize};
mod ks_login;
mod tt_login;
mod wx_login;
#[derive(Serialize, Deserialize, Enum)]
#[oai(rename_all = "kebab-case")]
pub enum LoginPlatform {
Wechat,
WeiXin,
TikTok,
DouYin,
KuaiShou,
}
#[derive(Serialize, Deserialize, Object)]
pub struct LoginRequest {
pub platform: LoginPlatform,
pub app_id: String,
pub app_secret: String,
pub login_code: String,
pub anonymous_code: String,
}
#[derive(Serialize, Deserialize, Object)]
pub struct LoginResponse {
pub open_id: String,
pub union_id: String,
pub session_key: String,
}
impl LoginRequest {
pub async fn send(self) -> Result<LoginResponse, GameError> {
match self.platform {
LoginPlatform::Wechat | LoginPlatform::WeiXin => {
let login = WechatLogin { app_id: self.app_id, app_secret: self.app_secret, js_code: self.login_code };
login.send().await?.as_result()
}
LoginPlatform::TikTok | LoginPlatform::DouYin => {
let login = TikTokLogin {
app_id: self.app_id,
app_secret: self.app_secret,
code: self.login_code,
anonymous_code: self.anonymous_code,
};
login.send().await?.as_result()
}
LoginPlatform::KuaiShou => {
let login = KuaiShouLogin { app_id: self.app_id, app_secret: self.app_secret, js_code: self.login_code };
login.send().await?.as_result()
}
}
}
}