1use serde::{Deserialize, Deserializer, Serialize};
2
3#[derive(Default, Debug, Clone, Serialize, Deserialize)]
5pub struct LevelInfo {
6 pub current_level: i32,
8 pub current_min: i32,
9 pub current_exp: i32,
10
11 #[serde(deserialize_with = "deserialize_next_exp")]
13 pub next_exp: NextExp,
14}
15
16#[derive(Debug, Clone, Serialize, Default)]
18pub enum NextExp {
19 Value(i32),
20 #[default]
21 Infinite,
22}
23
24fn deserialize_next_exp<'de, D>(deserializer: D) -> Result<NextExp, D::Error>
26where
27 D: Deserializer<'de>,
28{
29 let s: serde_json::Value = Deserialize::deserialize(deserializer)?;
30 match s {
31 serde_json::Value::String(ref str_val) if str_val == "--" => Ok(NextExp::Infinite),
32 serde_json::Value::Number(num) => Ok(NextExp::Value(num.as_i64().unwrap_or(0) as i32)),
33 _ => Ok(NextExp::Infinite),
34 }
35}