mini-game-service 0.0.1

提供小游戏后端服务
Documentation
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()
            }
        }
    }
}