Compare commits

...
8 changed files with 77 additions and 24 deletions

No files matched your search

+6
View File
@@ -49,3 +49,9 @@ jobs:
with:
token: ${{ secrets.GITHUB_TOKEN }}
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 }}
-1
View File
@@ -45,7 +45,6 @@ jobs:
- name: Publish the crates
run: |
cargo login
cargo publish --allow-dirty
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
+2 -3
View File
@@ -4,7 +4,7 @@ World of Tanks Blitz replay parser in Rust.
[![Crates.io](https://img.shields.io/crates/v/wotbreplay-parser)](https://crates.io/crates/wotbreplay-parser)
[![Last commit](https://img.shields.io/github/last-commit/eigenein/wotbreplay-parser)](https://github.com/eigenein/wotbreplay-parser/commits/main)
[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/eigenein/wotbreplay-parser/Check)](https://github.com/eigenein/wotbreplay-parser/actions)
[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/eigenein/wotbreplay-parser/check.yaml)](https://github.com/eigenein/wotbreplay-parser/actions)
![License: MIT](https://img.shields.io/crates/l/wotbreplay-parser)
[![docs.rs](https://img.shields.io/docsrs/wotbreplay-parser)](https://docs.rs/wotbreplay-parser)
@@ -14,8 +14,7 @@ World of Tanks Blitz replay parser in Rust.
use std::fs::File;
use anyhow::Result;
use wotbreplay_parser::Replay;
use wotbreplay_parser::models::TeamNumber;
use wotbreplay_parser::prelude::*;
fn main() -> Result<()> {
let battle_results = Replay::open(File::open("tests/replays/battle_results.wotbreplay")?)?
+8 -10
View File
@@ -2,23 +2,21 @@
#![warn(
clippy::all,
clippy::missing_const_for_fn,
clippy::trivially_copy_pass_by_ref,
clippy::map_unwrap_or,
clippy::explicit_into_iter_loop,
clippy::unused_self,
clippy::needless_pass_by_value
clippy::manual_let_else,
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;
pub mod models;
mod models;
pub mod prelude;
mod replay;
mod result;
pub use crate::error::Error;
pub use crate::replay::Replay;
pub use crate::result::Result;
#[cfg(doctest)]
mod test_readme {
macro_rules! external_doc_test {
+30 -3
View File
@@ -9,7 +9,7 @@ impl BattleResults {
/// Parse battle results from the buffer.
///
/// 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)
}
}
@@ -26,7 +26,7 @@ pub struct BattleResults {
/// Replay's author results.
#[prost(message, required, tag = "8")]
pub author_results: AuthorResults,
pub author: Author,
/// Author's free XP, including premium.
#[prost(uint32, tag = "137")]
@@ -72,6 +72,9 @@ pub struct PlayerInfo {
#[prost(string, optional, tag = "5")]
pub clan_tag: Option<String>,
#[prost(message, required, tag = "7")]
pub avatar: Avatar,
}
#[derive(
@@ -176,7 +179,7 @@ impl PlayerResultsInfo {
}
#[derive(Message, Serialize)]
pub struct AuthorResults {
pub struct Author {
/// Earned credits, including premium and special awards and medals.
#[prost(uint32, tag = "2")]
pub credits_earned: u32,
@@ -187,4 +190,28 @@ pub struct AuthorResults {
#[prost(uint32, tag = "8")]
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,
}
+10 -1
View File
@@ -4,8 +4,9 @@ use prost::Message;
use serde::Deserialize;
use serde_bytes::ByteBuf;
use crate::error::Error;
use crate::models::BattleResults;
use crate::{Error, Result};
use crate::result::Result;
/// Represents un-pickled `battle_results.dat`.
#[derive(Debug, Deserialize)]
@@ -29,3 +30,11 @@ impl BattleResultsDat {
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()
}
}
+4
View File
@@ -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
View File
@@ -1,8 +1,7 @@
use std::fs::File;
use anyhow::Result;
use wotbreplay_parser::models::TeamNumber;
use wotbreplay_parser::Replay;
use wotbreplay_parser::prelude::*;
#[test]
fn player_results_ok() -> Result<()> {
@@ -68,12 +67,23 @@ fn player_results_ok() -> Result<()> {
}
#[test]
fn clan_tags_ok() -> Result<()> {
fn player_info_ok() -> Result<()> {
let battle_results = Replay::open(File::open("tests/replays/player_results.wotbreplay")?)?
.read_battle_results()?;
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.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);
Ok(())
@@ -111,9 +121,10 @@ fn author_results_ok() -> Result<()> {
let battle_results = Replay::open(File::open("tests/replays/author_results.wotbreplay")?)?
.read_battle_results()?;
assert_eq!(battle_results.author_results.credits_earned, 53623);
assert_eq!(battle_results.author_results.combat_xp, 2370);
assert_eq!(battle_results.author_results.damage_dealt, 1738);
assert_eq!(battle_results.author.credits_earned, 53623);
assert_eq!(battle_results.author.combat_xp, 2370);
assert_eq!(battle_results.author.damage_dealt, 1738);
assert_eq!(battle_results.author.account_id, 594778041);
assert_eq!(battle_results.free_xp, 116);
Ok(())