From 97b83050682aea67b5c21eb53a3b9cd70b85589f Mon Sep 17 00:00:00 2001 From: Lucas Vas Date: Tue, 10 Feb 2026 08:19:57 -0500 Subject: [PATCH] fix: don't panic on missing data --- src/common/comparison/base.rs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/common/comparison/base.rs b/src/common/comparison/base.rs index afca34b..6ba5c86 100644 --- a/src/common/comparison/base.rs +++ b/src/common/comparison/base.rs @@ -2,7 +2,8 @@ use super::{ Comparison, MapListComparison, NestedListComparison, NumberComparison, NumberListComparison, TextComparison, TextListComparison, }; -use crate::common::{ExpandableInfo, ValueType}; +use crate::common::ValueType; +use std::collections::HashMap; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, Clone)] @@ -42,15 +43,13 @@ impl ComparisonData { } } - pub fn compare(&self, student_data: &ExpandableInfo) -> Result { - let value = student_data.data.get(&self.member).expect( - format!( - "Couldn't find member {:?}, current student data: {:?}", - self.member, student_data + pub fn compare(&self, student_data: &HashMap) -> Result { + student_data.get(&self.member) + .ok_or_else(|| + format!("Couldn't find member {:?}, current student data: {:?}", self.member, student_data) ) - .as_str(), - ); - self.comparison.evaluate(value, &self.target_value) + .and_then(|value| self.comparison.evaluate(value, &self.target_value)) + .or_else(|err| Err(err.to_string())) } } @@ -106,11 +105,11 @@ mod tests { display_text: "First Name is Jane".to_string(), }; - let mut result = text_comp_success.compare(&student_data); + let mut result = text_comp_success.compare(&student_data.data); assert!(result.is_ok()); assert_eq!(result.unwrap(), true); - result = text_comp_fail.compare(&student_data); + result = text_comp_fail.compare(&student_data.data); assert!(result.is_err()); } }