mirror of
https://github.com/eigenein/wotbreplay-parser.git
synced 2026-10-23 19:29:48 +02:00
Compare commits
10
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb9beb5ecc | ||
|
|
06de455795 | ||
|
|
ac256d4c9d | ||
|
|
e853224017 | ||
|
|
04420da334 | ||
|
|
cd933f6584 | ||
|
|
ba28620be7 | ||
|
|
3913046be7 | ||
|
|
de6deb3a06 | ||
|
|
e1d9c27bda |
No files matched your search
@@ -49,3 +49,9 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
args: --all-targets --all-features --tests -- -D warnings
|
args: --all-targets --all-features --tests -- -D warnings
|
||||||
|
|
||||||
|
- name: Publish the crates (dry run)
|
||||||
|
run: |
|
||||||
|
cargo publish --allow-dirty --dry-run
|
||||||
|
env:
|
||||||
|
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
||||||
@@ -45,7 +45,6 @@ jobs:
|
|||||||
|
|
||||||
- name: Publish the crates
|
- name: Publish the crates
|
||||||
run: |
|
run: |
|
||||||
cargo login
|
|
||||||
cargo publish --allow-dirty
|
cargo publish --allow-dirty
|
||||||
env:
|
env:
|
||||||
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
||||||
@@ -4,7 +4,7 @@ World of Tanks Blitz replay parser in Rust.
|
|||||||
|
|
||||||
[](https://crates.io/crates/wotbreplay-parser)
|
[](https://crates.io/crates/wotbreplay-parser)
|
||||||
[](https://github.com/eigenein/wotbreplay-parser/commits/main)
|
[](https://github.com/eigenein/wotbreplay-parser/commits/main)
|
||||||
[](https://github.com/eigenein/wotbreplay-parser/actions)
|
[](https://github.com/eigenein/wotbreplay-parser/actions)
|
||||||

|

|
||||||
[](https://docs.rs/wotbreplay-parser)
|
[](https://docs.rs/wotbreplay-parser)
|
||||||
|
|
||||||
@@ -14,8 +14,7 @@ World of Tanks Blitz replay parser in Rust.
|
|||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use wotbreplay_parser::Replay;
|
use wotbreplay_parser::prelude::*;
|
||||||
use wotbreplay_parser::models::TeamNumber;
|
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
fn main() -> Result<()> {
|
||||||
let battle_results = Replay::open(File::open("tests/replays/battle_results.wotbreplay")?)?
|
let battle_results = Replay::open(File::open("tests/replays/battle_results.wotbreplay")?)?
|
||||||
|
|||||||
+8
-10
@@ -2,23 +2,21 @@
|
|||||||
|
|
||||||
#![warn(
|
#![warn(
|
||||||
clippy::all,
|
clippy::all,
|
||||||
clippy::missing_const_for_fn,
|
|
||||||
clippy::trivially_copy_pass_by_ref,
|
|
||||||
clippy::map_unwrap_or,
|
|
||||||
clippy::explicit_into_iter_loop,
|
clippy::explicit_into_iter_loop,
|
||||||
clippy::unused_self,
|
clippy::manual_let_else,
|
||||||
clippy::needless_pass_by_value
|
clippy::map_unwrap_or,
|
||||||
|
clippy::missing_const_for_fn,
|
||||||
|
clippy::needless_pass_by_value,
|
||||||
|
clippy::trivially_copy_pass_by_ref,
|
||||||
|
clippy::unused_self
|
||||||
)]
|
)]
|
||||||
|
|
||||||
mod error;
|
mod error;
|
||||||
pub mod models;
|
mod models;
|
||||||
|
pub mod prelude;
|
||||||
mod replay;
|
mod replay;
|
||||||
mod result;
|
mod result;
|
||||||
|
|
||||||
pub use crate::error::Error;
|
|
||||||
pub use crate::replay::Replay;
|
|
||||||
pub use crate::result::Result;
|
|
||||||
|
|
||||||
#[cfg(doctest)]
|
#[cfg(doctest)]
|
||||||
mod test_readme {
|
mod test_readme {
|
||||||
macro_rules! external_doc_test {
|
macro_rules! external_doc_test {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ impl BattleResults {
|
|||||||
/// Parse battle results from the buffer.
|
/// Parse battle results from the buffer.
|
||||||
///
|
///
|
||||||
/// Note, that this does NOT parse `battle_results.dat` itself, but the un-pickled tuple element.
|
/// Note, that this does NOT parse `battle_results.dat` itself, but the un-pickled tuple element.
|
||||||
pub fn parse(buffer: impl Buf) -> Result<Self> {
|
pub fn from_buffer(buffer: impl Buf) -> Result<Self> {
|
||||||
Self::decode(buffer).map_err(Error::DecodeFailed)
|
Self::decode(buffer).map_err(Error::DecodeFailed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -26,7 +26,7 @@ pub struct BattleResults {
|
|||||||
|
|
||||||
/// Replay's author results.
|
/// Replay's author results.
|
||||||
#[prost(message, required, tag = "8")]
|
#[prost(message, required, tag = "8")]
|
||||||
pub author_results: AuthorResults,
|
pub author: Author,
|
||||||
|
|
||||||
/// Author's free XP, including premium.
|
/// Author's free XP, including premium.
|
||||||
#[prost(uint32, tag = "137")]
|
#[prost(uint32, tag = "137")]
|
||||||
@@ -72,6 +72,9 @@ pub struct PlayerInfo {
|
|||||||
|
|
||||||
#[prost(string, optional, tag = "5")]
|
#[prost(string, optional, tag = "5")]
|
||||||
pub clan_tag: Option<String>,
|
pub clan_tag: Option<String>,
|
||||||
|
|
||||||
|
#[prost(message, required, tag = "7")]
|
||||||
|
pub avatar: Avatar,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(
|
#[derive(
|
||||||
@@ -176,7 +179,7 @@ impl PlayerResultsInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Message, Serialize)]
|
#[derive(Message, Serialize)]
|
||||||
pub struct AuthorResults {
|
pub struct Author {
|
||||||
/// Earned credits, including premium and special awards and medals.
|
/// Earned credits, including premium and special awards and medals.
|
||||||
#[prost(uint32, tag = "2")]
|
#[prost(uint32, tag = "2")]
|
||||||
pub credits_earned: u32,
|
pub credits_earned: u32,
|
||||||
@@ -187,4 +190,28 @@ pub struct AuthorResults {
|
|||||||
|
|
||||||
#[prost(uint32, tag = "8")]
|
#[prost(uint32, tag = "8")]
|
||||||
pub damage_dealt: u32,
|
pub damage_dealt: u32,
|
||||||
|
|
||||||
|
#[prost(uint32, tag = "101")]
|
||||||
|
pub account_id: u32,
|
||||||
|
|
||||||
|
#[prost(enumeration = "TeamNumber", tag = "102")]
|
||||||
|
pub team_number: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Message, Serialize)]
|
||||||
|
pub struct Avatar {
|
||||||
|
#[prost(message, required, tag = "2")]
|
||||||
|
pub info: AvatarInfo,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Message, Serialize)]
|
||||||
|
pub struct AvatarInfo {
|
||||||
|
#[prost(string, tag = "2")]
|
||||||
|
pub gfx_url: String,
|
||||||
|
|
||||||
|
#[prost(string, tag = "3")]
|
||||||
|
pub gfx2_url: String,
|
||||||
|
|
||||||
|
#[prost(string, tag = "4")]
|
||||||
|
pub kind: String,
|
||||||
}
|
}
|
||||||
@@ -4,8 +4,9 @@ use prost::Message;
|
|||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde_bytes::ByteBuf;
|
use serde_bytes::ByteBuf;
|
||||||
|
|
||||||
|
use crate::error::Error;
|
||||||
use crate::models::BattleResults;
|
use crate::models::BattleResults;
|
||||||
use crate::{Error, Result};
|
use crate::result::Result;
|
||||||
|
|
||||||
/// Represents un-pickled `battle_results.dat`.
|
/// Represents un-pickled `battle_results.dat`.
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
@@ -29,3 +30,11 @@ impl BattleResultsDat {
|
|||||||
BattleResults::decode(self.1.as_ref()).map_err(Error::DecodeFailed)
|
BattleResults::decode(self.1.as_ref()).map_err(Error::DecodeFailed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl TryInto<BattleResults> for BattleResultsDat {
|
||||||
|
type Error = Error;
|
||||||
|
|
||||||
|
fn try_into(self) -> Result<BattleResults> {
|
||||||
|
self.decode_battle_results()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
pub use crate::error::Error;
|
||||||
|
pub use crate::models::*;
|
||||||
|
pub use crate::replay::Replay;
|
||||||
|
pub use crate::result::Result;
|
||||||
+17
-6
@@ -1,8 +1,7 @@
|
|||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use wotbreplay_parser::models::TeamNumber;
|
use wotbreplay_parser::prelude::*;
|
||||||
use wotbreplay_parser::Replay;
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn player_results_ok() -> Result<()> {
|
fn player_results_ok() -> Result<()> {
|
||||||
@@ -68,12 +67,23 @@ fn player_results_ok() -> Result<()> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn clan_tags_ok() -> Result<()> {
|
fn player_info_ok() -> Result<()> {
|
||||||
let battle_results = Replay::open(File::open("tests/replays/player_results.wotbreplay")?)?
|
let battle_results = Replay::open(File::open("tests/replays/player_results.wotbreplay")?)?
|
||||||
.read_battle_results()?;
|
.read_battle_results()?;
|
||||||
|
|
||||||
assert_eq!(battle_results.players[1].info.clan_tag.as_deref(), Some("AN0NY"));
|
assert_eq!(battle_results.players[1].info.clan_tag.as_deref(), Some("AN0NY"));
|
||||||
|
|
||||||
assert_eq!(battle_results.players[10].info.clan_tag.as_deref(), Some("BBS"));
|
assert_eq!(battle_results.players[10].info.clan_tag.as_deref(), Some("BBS"));
|
||||||
|
assert_eq!(battle_results.players[10].info.avatar.info.kind, "legendary");
|
||||||
|
assert_eq!(
|
||||||
|
battle_results.players[10].info.avatar.info.gfx_url,
|
||||||
|
"https://stufficons.wgcdn.co/Gfx/avatar_UFO_legendary_anim/220523_104739_752791.webp"
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
battle_results.players[10].info.avatar.info.gfx2_url,
|
||||||
|
"https://stufficons.wgcdn.co/Gfx2/avatar_UFO_legendary_anim/220523_104755_251331.webp"
|
||||||
|
);
|
||||||
|
|
||||||
assert_eq!(battle_results.players[11].info.clan_tag, None);
|
assert_eq!(battle_results.players[11].info.clan_tag, None);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -111,9 +121,10 @@ fn author_results_ok() -> Result<()> {
|
|||||||
let battle_results = Replay::open(File::open("tests/replays/author_results.wotbreplay")?)?
|
let battle_results = Replay::open(File::open("tests/replays/author_results.wotbreplay")?)?
|
||||||
.read_battle_results()?;
|
.read_battle_results()?;
|
||||||
|
|
||||||
assert_eq!(battle_results.author_results.credits_earned, 53623);
|
assert_eq!(battle_results.author.credits_earned, 53623);
|
||||||
assert_eq!(battle_results.author_results.combat_xp, 2370);
|
assert_eq!(battle_results.author.combat_xp, 2370);
|
||||||
assert_eq!(battle_results.author_results.damage_dealt, 1738);
|
assert_eq!(battle_results.author.damage_dealt, 1738);
|
||||||
|
assert_eq!(battle_results.author.account_id, 594778041);
|
||||||
assert_eq!(battle_results.free_xp, 116);
|
assert_eq!(battle_results.free_xp, 116);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in new issue
Block a user