pub mod error;
pub mod success;
pub mod update;
use anyhow::Result;
use serde::{Deserialize, Serialize};
use serde_type_name::type_name;
pub trait IntoResult {
fn to(self, serial: Option<i64>) -> Result<Vec<u8>>;
}
#[derive(Serialize)]
struct SerializeSerialJson<'a, T: Serialize> {
serial: i64,
func: &'a str,
context: T,
}
#[derive(Serialize)]
struct SerializeJson<'a, T: Serialize> {
func: &'a str,
context: T,
}
impl<T: Serialize> IntoResult for T {
#[inline]
fn to(self, serial: Option<i64>) -> Result<Vec<u8>> {
let func = type_name(&self)?;
if let Some(serial) = serial {
let json_value = SerializeSerialJson {
serial,
func,
context: self,
};
Ok(serde_json::to_vec(&json_value)?)
} else {
let json_value = SerializeJson {
func,
context: self,
};
Ok(serde_json::to_vec(&json_value)?)
}
}
}
#[macro_export]
macro_rules! ret {
($pack:expr) => {
return $crate::packers::IntoResult::to($pack, None)
};
($pack:expr,$serial:tt) => {
return $crate::packers::IntoResult::to($pack, $serial)
};
}
#[derive(Deserialize, Serialize)]
pub struct Ping {
pub tick: i64,
}
#[derive(Deserialize, Serialize)]
pub struct Pong {
pub tick: i64,
}
#[derive(Serialize)]
pub struct GetTokenResult {
pub token: u64,
pub last_elapsed_time: i64,
pub timeout: i64,
pub is_wss_connect: bool,
}
#[derive(Serialize)]
pub struct BroadSlotMarquess<'a> {
pub game_id: u32,
pub nickname: &'a str,
pub vip_level: i32,
pub bonus_state: u8,
pub win: i64,
}