From 4d8f1d2d46465d1174a1a23ca7e15321dc83279d Mon Sep 17 00:00:00 2001 From: Cutieguwu Date: Wed, 30 Apr 2025 21:14:57 -0400 Subject: [PATCH] Clean up delta calculation. --- gamelog/src/event.rs | 40 +++++++++++++++++----------------------- gamelog/src/terrain.rs | 10 +++++++--- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/gamelog/src/event.rs b/gamelog/src/event.rs index 12b6af6..2b27074 100644 --- a/gamelog/src/event.rs +++ b/gamelog/src/event.rs @@ -18,34 +18,13 @@ impl Event { /// Returns `None` if no delta can be calculated between /// `self` and following events. pub fn delta(&self, following: &Self) -> Option { - // Clean this trash spaghetti code up. - - fn make_play(event: &Event) -> Option { - match event { - Event::Kickoff(_) | Event::Turnover(_) => Some(Play::default()), - Event::Play(play) => { - let p = play.to_owned(); - - if p.down.is_none() - || p.terrain.is_none() - || p.terrain.as_ref()? == &TerrainState::Unknown - { - None - } else { - Some(p) - } - } - _ => None, - } - } - - let preceeding = make_play(self)?; + let preceeding = self.to_play()?; let following = if let Event::Turnover(_) = following { // I should really just early return // but this is too funny to look at. None? } else { - make_play(following)? + following.to_play()? }; if following.down? == Down::First { @@ -90,6 +69,21 @@ impl Event { None } } + + /// Converts an event into it's associated Play object, if there is one. + fn to_play(self: &Event) -> Option { + if let Event::Play(play) = self { + if play.down.is_none() || play.terrain.is_none() { + None + } else { + Some(play.to_owned()) + } + } else if let Event::Kickoff(_) | Event::Turnover(_) = self { + Some(Play::default()) + } else { + None + } + } } #[derive(Debug, Deserialize, Clone, PartialEq, Default)] diff --git a/gamelog/src/terrain.rs b/gamelog/src/terrain.rs index fd1ded6..f7f8049 100644 --- a/gamelog/src/terrain.rs +++ b/gamelog/src/terrain.rs @@ -1,10 +1,14 @@ use serde::Deserialize; -#[derive(Debug, Deserialize, Clone, Default, PartialEq)] +#[derive(Debug, Deserialize, Clone, PartialEq)] pub enum TerrainState { Yards(u8), GoalLine, Inches, - #[default] - Unknown, +} + +impl Default for TerrainState { + fn default() -> Self { + TerrainState::Yards(10) + } }