From b435313c664047427b9e17960bd027122d35bcbc Mon Sep 17 00:00:00 2001 From: Luke Street Date: Tue, 8 Apr 2025 08:23:03 -0600 Subject: [PATCH] Improve timeago/date filter error handling --- src/templates.rs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/templates.rs b/src/templates.rs index 6bae33d..fc5fcc6 100644 --- a/src/templates.rs +++ b/src/templates.rs @@ -31,15 +31,20 @@ where S: serde::Serialize { } fn timeago(value: String) -> String { - let value = DateTime::parse_from_rfc3339(&value).unwrap_or_default(); - let duration = Utc::now().signed_duration_since(value); - timeago::Formatter::new().convert(duration.to_std().unwrap()) + let Ok(value) = DateTime::parse_from_rfc3339(&value) else { + return "[invalid]".to_string(); + }; + let Ok(duration) = Utc::now().signed_duration_since(value).to_std() else { + return "[out of range]".to_string(); + }; + timeago::Formatter::new().convert(duration) } fn date(value: String, format: Option) -> String { - let value = DateTime::parse_from_rfc3339(&value).unwrap_or_default(); - let format = format.as_deref().unwrap_or("%Y-%m-%d %H:%M:%S %Z"); - value.format(format).to_string() + let Ok(value) = DateTime::parse_from_rfc3339(&value) else { + return "[invalid]".to_string(); + }; + value.format(format.as_deref().unwrap_or("%Y-%m-%d %H:%M:%S %Z")).to_string() } /// Format a size in bytes to a human-readable string.