Fix: make some fields optional

This commit is contained in:
eigenein committed 2023-05-04 17:53:52 +02:00
1 parent 1830536224
commit 0ac983832b
3 files changed
+30 -20

No files matched your search

+8 -8
View File
@@ -4,8 +4,8 @@ use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub struct BasePlayerCreate { pub struct BasePlayerCreate {
#[serde(rename(deserialize = "playersBattleCategoriesIds"))] #[serde(default, rename(deserialize = "playersBattleCategoriesIds"))]
pub players_battle_categories_ids: HashMap<u32, (u8, u32)>, pub players_battle_categories_ids: Option<HashMap<u32, (u8, u32)>>,
#[serde(rename(deserialize = "battleLevel"))] #[serde(rename(deserialize = "battleLevel"))]
pub battle_level: u8, pub battle_level: u8,
@@ -22,17 +22,17 @@ pub struct BasePlayerCreate {
#[serde(rename(deserialize = "camouflageSlot"))] #[serde(rename(deserialize = "camouflageSlot"))]
pub camouflage_slot: u8, pub camouflage_slot: u8,
#[serde(rename(deserialize = "avgMmr"))] #[serde(default, rename(deserialize = "avgMmr"))]
pub average_mmr: Vec<Option<f64>>, pub average_mmr: Option<Vec<Option<f64>>>,
#[serde(rename(deserialize = "playerWaitTimes"))] #[serde(default, rename(deserialize = "playerWaitTimes"))]
pub player_wait_times: HashMap<u32, f64>, pub player_wait_times: Option<HashMap<u32, f64>>,
#[serde(rename(deserialize = "accountDatabaseIds"))] #[serde(rename(deserialize = "accountDatabaseIds"))]
pub account_database_ids: Vec<u32>, pub account_database_ids: Vec<u32>,
#[serde(rename(deserialize = "turboBattlesStats"))] #[serde(default, rename(deserialize = "turboBattlesStats"))]
pub turbo_battles_statistics: TurboBattlesStatistics, pub turbo_battles_statistics: Option<TurboBattlesStatistics>,
} }
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
+22 -12
View File
@@ -19,13 +19,13 @@ fn parse_ok() -> Result<()> {
} }
#[test] #[test]
fn type0_ok() -> Result<()> { fn base_player_create_ok() -> Result<()> {
let mut replay = Replay::open(File::open( let mut replay = Replay::open(File::open(
"tests/replays/20230429_0126__helaas_pindakaas_A140_ASTRON_REX_105_16114615898101270.wotbreplay", "tests/replays/20230429_0126__helaas_pindakaas_A140_ASTRON_REX_105_16114615898101270.wotbreplay",
)?)?; )?)?;
let data = replay.read_data()?; let data = replay.read_data()?;
let (author_nickname, arena_unique_id, arena_type_id, type_0) = data let (author_nickname, arena_unique_id, arena_type_id, arguments) = data
.packets .packets
.iter() .iter()
.filter_map(|packet| { .filter_map(|packet| {
@@ -46,14 +46,17 @@ fn type0_ok() -> Result<()> {
assert_eq!(author_nickname, "helaas_pindakaas"); assert_eq!(author_nickname, "helaas_pindakaas");
assert_eq!(*arena_unique_id, 16114615898101270); assert_eq!(*arena_unique_id, 16114615898101270);
assert_eq!(*arena_type_id, 43); assert_eq!(*arena_type_id, 43);
assert_eq!(type_0.battle_level, 9); assert_eq!(arguments.battle_level, 9);
assert_eq!(type_0.battle_category_id, 13); assert_eq!(arguments.battle_category_id, 13);
assert!(type_0.is_mouse_enabled); assert!(arguments.is_mouse_enabled);
assert_eq!(type_0.matchmaker_type, 2); assert_eq!(arguments.matchmaker_type, 2);
assert_eq!(type_0.camouflage_slot, 1); assert_eq!(arguments.camouflage_slot, 1);
assert_eq!(type_0.average_mmr, [Some(59.29457753400008), Some(99.34182121604681)]);
assert_eq!( assert_eq!(
type_0.account_database_ids, arguments.average_mmr,
Some(vec![Some(59.29457753400008), Some(99.34182121604681)])
);
assert_eq!(
arguments.account_database_ids,
[ [
517033644, 537867068, 597583401, 601893865, 576810156, 531053956, 599580824, 558025185, 517033644, 537867068, 597583401, 601893865, 576810156, 531053956, 599580824, 558025185,
526927603, 594778041, 505587490, 597422303, 531923111, 587617355 526927603, 594778041, 505587490, 597422303, 531923111, 587617355
@@ -64,7 +67,7 @@ fn type0_ok() -> Result<()> {
} }
#[test] #[test]
fn subtype_2f_players_ok() -> Result<()> { fn update_arena_ok() -> Result<()> {
let mut replay = Replay::open(File::open( let mut replay = Replay::open(File::open(
"tests/replays/20230429_0126__helaas_pindakaas_A140_ASTRON_REX_105_16114615898101270.wotbreplay", "tests/replays/20230429_0126__helaas_pindakaas_A140_ASTRON_REX_105_16114615898101270.wotbreplay",
)?)?; )?)?;
@@ -74,8 +77,8 @@ fn subtype_2f_players_ok() -> Result<()> {
.packets .packets
.iter() .iter()
.filter_map(|packet| match &packet.payload { .filter_map(|packet| match &packet.payload {
Payload::EntityMethod(EntityMethod::UpdateArena { arguments: sub_type_2f, .. }) => { Payload::EntityMethod(EntityMethod::UpdateArena { arguments, .. }) => {
sub_type_2f.players.as_ref() arguments.players.as_ref()
} }
_ => None, _ => None,
}) })
@@ -91,3 +94,10 @@ fn subtype_2f_players_ok() -> Result<()> {
Ok(()) Ok(())
} }
#[test]
fn training_room_ok() -> Result<()> {
let mut replay = Replay::open(File::open("tests/replays/training_room.wotbreplay")?)?;
replay.read_data()?;
Ok(())
}
Binary file not shown.