From 7fa3e1c0f4733d9af332ada3612343cb62195117 Mon Sep 17 00:00:00 2001
From: Ellie <ellie@elliehuxtable.com>
Date: Mon, 20 Dec 2021 05:52:07 +0000
Subject: [PATCH] Do not crash if the history timestamp is in the future (#250)

Resolve #189

We were throwing an OutOfRangeError. This occurs when you attempt to
convert to a duration, and your input is <0. A value in the future would
have done this. This is especially noticeable during DST...
---
 src/command/search.rs | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/command/search.rs b/src/command/search.rs
index 922f746..c994214 100644
--- a/src/command/search.rs
+++ b/src/command/search.rs
@@ -42,7 +42,16 @@ impl State {
                 let duration: Vec<&str> = duration.split(' ').collect();
 
                 let ago = chrono::Utc::now().sub(h.timestamp);
-                let ago = humantime::format_duration(ago.to_std().unwrap()).to_string();
+
+                // Account for the chance that h.timestamp is "in the future"
+                // This would mean that "ago" is negative, and the unwrap here
+                // would fail.
+                // If the timestamp would otherwise be in the future, display
+                // the time ago as 0.
+                let ago = humantime::format_duration(
+                    ago.to_std().unwrap_or_else(|_| Duration::new(0, 0)),
+                )
+                .to_string();
                 let ago: Vec<&str> = ago.split(' ').collect();
 
                 (