aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2021-11-13 12:09:02 +0100
committerDaniel Schadt <kingdread@gmx.de>2021-11-13 12:09:02 +0100
commitd98c391571ac41af08757c3fb87beef0a6415d23 (patch)
treeb3744e7de930f3fd13e82a80720ff84002c3c4ee /src
parent0aee5f34c9f384656740666c6fdc03ccf537d2a3 (diff)
downloadevtclib-d98c391571ac41af08757c3fb87beef0a6415d23.tar.gz
evtclib-d98c391571ac41af08757c3fb87beef0a6415d23.tar.bz2
evtclib-d98c391571ac41af08757c3fb87beef0a6415d23.zip
Document panic in Log::boss and remove other panic
Overall, evtclib is doing quite well on the .unwrap()/.expect()/panic!() calls, except for some doctests (which can be changed at some point) and the actual tests. One case where we do panic (and should document it!) is Log::boss. The documentation has been added there. Another (rare if not impossible for proper evtc files) case was the conversion of the language event, which assumed that we will definitely be able to convert the u64 to the right language. In all normal cases this should be true, but if evtclib deals with untrusted input, we might not want to panic a whole program because someone smuggled in a malicious file.
Diffstat (limited to 'src')
-rw-r--r--src/event.rs5
-rw-r--r--src/lib.rs5
2 files changed, 9 insertions, 1 deletions
diff --git a/src/event.rs b/src/event.rs
index 4d02fe7..ee561f8 100644
--- a/src/event.rs
+++ b/src/event.rs
@@ -19,6 +19,8 @@ pub enum FromRawEventError {
UnknownStateChange(raw::CbtStateChange),
#[error("event contains an unknown damage event")]
UnknownDamageEvent,
+ #[error("an unknown language byte was found")]
+ UnknownLanguage,
#[error("the event contains invalid text")]
InvalidText,
#[error("an unexpected REPLINFO was found")]
@@ -338,7 +340,8 @@ impl TryFrom<&raw::CbtEvent> for Event {
agent_addr: raw_event.src_agent,
},
CbtStateChange::Language => EventKind::Language {
- language: raw::Language::from_u64(raw_event.src_agent).unwrap(),
+ language: raw::Language::from_u64(raw_event.src_agent)
+ .ok_or(FromRawEventError::UnknownLanguage)?,
},
CbtStateChange::GwBuild => EventKind::Build {
build: raw_event.src_agent,
diff --git a/src/lib.rs b/src/lib.rs
index 60f4903..823cd71 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -188,6 +188,11 @@ impl Log {
///
/// Be careful with encounters that have multiple boss agents, such as Trio
/// and Xera.
+ ///
+ /// # Panics
+ ///
+ /// This function will panic if the boss agent cannot be found. For a more failsafe version,
+ /// see [`Log::boss_agents`].
pub fn boss(&self) -> &Agent {
self.characters()
.find(|c| c.character().id() == self.boss_id)