aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2020-10-04 12:01:06 +0200
committerDaniel Schadt <kingdread@gmx.de>2020-10-04 12:01:06 +0200
commitf480faeefbab83a4396a172a15fce7d264216ef2 (patch)
tree8a5d5fc9b677d15be439f78d6dbe100157fcfb34 /src
parentb6676565c39bb6a2fe8f5f01218fe654ec4d2cb8 (diff)
downloadevtclib-f480faeefbab83a4396a172a15fce7d264216ef2.tar.gz
evtclib-f480faeefbab83a4396a172a15fce7d264216ef2.tar.bz2
evtclib-f480faeefbab83a4396a172a15fce7d264216ef2.zip
add Encounter::from_header_id
It makes sense to expose this logic as a function, as other programs like raidgrep might want to use the same logic when dealing with partial evtc files.
Diffstat (limited to 'src')
-rw-r--r--src/gamedata.rs16
-rw-r--r--src/lib.rs4
2 files changed, 17 insertions, 3 deletions
diff --git a/src/gamedata.rs b/src/gamedata.rs
index 64b6731..ac8d46a 100644
--- a/src/gamedata.rs
+++ b/src/gamedata.rs
@@ -1,5 +1,6 @@
//! This module contains some low-level game data, such as different boss IDs.
use num_derive::FromPrimitive;
+use num_traits::FromPrimitive;
use std::{
fmt::{self, Display, Formatter},
str::FromStr,
@@ -118,6 +119,21 @@ impl Encounter {
Encounter::WhisperOfJormag => &[Boss::WhisperOfJormag],
}
}
+
+ /// Converts a combat ID as given in the arcdps header into the correct encounter.
+ ///
+ /// This properly takes care of encounters with multiple bosses or which could be saved as
+ /// multiple bosses.
+ ///
+ /// ```
+ /// # use evtclib::gamedata::Encounter;
+ /// assert_eq!(Encounter::from_header_id(0x3C4E), Some(Encounter::ValeGuardian));
+ /// assert_eq!(Encounter::from_header_id(0x5261), Some(Encounter::TwinLargos));
+ /// ```
+ #[inline]
+ pub fn from_header_id(id: u16) -> Option<Encounter> {
+ Boss::from_u16(id).map(Boss::encounter)
+ }
}
/// Error for when converting a string to an encounter fails.
diff --git a/src/lib.rs b/src/lib.rs
index bb71c77..c950b17 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -88,7 +88,6 @@
//! While there are legitimate use cases for writing/modification support, they are currently not
//! implemented (but might be in a future version).
-use num_traits::FromPrimitive;
use thiserror::Error;
pub mod raw;
@@ -103,7 +102,6 @@ mod processing;
pub use processing::{process, process_file, process_stream, Compression};
pub mod gamedata;
-use gamedata::Boss;
pub use gamedata::{EliteSpec, Encounter, Profession};
pub mod analyzers;
@@ -230,7 +228,7 @@ impl Log {
/// if we know about it in [`Encounter`].
#[inline]
pub fn encounter(&self) -> Option<Encounter> {
- Boss::from_u16(self.boss_id).map(Boss::encounter)
+ Encounter::from_header_id(self.boss_id)
}
/// Return an analyzer suitable to analyze the given log.