use std::io::{Read, Seek};
use zip::ZipArchive;
use crate::models::battle_results::BattleResults;
use crate::models::battle_results_dat::BattleResultsDat;
use crate::models::data::Data;
#[cfg(feature = "meta")]
use crate::models::meta::Meta;
use crate::result::Result;
pub struct Replay<R>(pub(crate) ZipArchive<R>);
impl<R: Read + Seek> Replay<R> {
pub fn open(reader: R) -> Result<Self> {
Ok(Self(ZipArchive::new(reader)?))
}
pub fn read_battle_results(&mut self) -> Result<BattleResults> {
self.read_battle_results_dat()?.try_into()
}
pub fn read_battle_results_dat(&mut self) -> Result<BattleResultsDat> {
let pickled_battle_results = self.0.by_name("battle_results.dat")?;
BattleResultsDat::from_reader(pickled_battle_results)
}
#[cfg(feature = "meta")]
pub fn read_meta(&mut self) -> Result<Meta> {
Meta::from_reader(self.0.by_name("meta.json")?)
}
pub fn read_data(&mut self) -> Result<Data> {
Data::from_reader(self.0.by_name("data.wotreplay")?)
}
}