use serde::Deserialize;
use serde_json::Value;
use crate::{impl_str_enum, utils::error::Error};
#[derive(Debug, Clone, Deserialize)]
#[allow(non_snake_case)]
pub struct MoFishGame {
pub userName: String,
pub stage: String,
pub time: u64,
}
impl MoFishGame {
pub fn from_value(data: &Value) -> Result<Self, Error> {
serde_json::from_value(data.clone())
.map_err(|e| Error::Parse(format!("Failed to parse MoFishGame: {}", e)))
}
}
#[derive(Debug, Clone, Deserialize)]
#[allow(non_snake_case)]
pub struct UserIP {
pub latestLoginIP: String,
pub userId: String,
}
impl UserIP {
pub fn from_value(data: &Value) -> Result<Self, Error> {
serde_json::from_value(data.clone())
.map_err(|e| Error::Parse(format!("Failed to parse UserIP: {}", e)))
}
}
#[derive(Clone, Debug, Deserialize)]
pub enum UserBagType {
#[serde(rename = "checkin1day")]
Checkin1day,
#[serde(rename = "checkin2days")]
Checkin2days,
#[serde(rename = "patchCheckinCard")]
PatchCheckinCard,
#[serde(rename = "metalTicket")]
MetalTicket,
}
impl_str_enum!(UserBagType{
Checkin1day => "checkin1day",
Checkin2days => "checkin2days",
PatchCheckinCard => "patchCheckinCard",
MetalTicket => "metalTicket",
});
#[derive(Clone, Debug, Deserialize)]
#[allow(non_snake_case)]
pub struct UserBag {
pub checkin1day: u32,
pub checkin2days: u32,
pub patchCheckinCard: u32,
pub metalTicket: u32,
}
impl UserBag {
pub fn from_value(data: &Value) -> Result<Self, Error> {
serde_json::from_value(data.clone())
.map_err(|e| Error::Parse(format!("Failed to parse UserBag: {}", e)))
}
}