From bf35fd0ae474039791a621b1bfa563c350e8cffd Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sat, 16 May 2020 22:02:58 -0400 Subject: [PATCH] equals implementation for literal. --- src/renderer/parameters_context.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/renderer/parameters_context.rs b/src/renderer/parameters_context.rs index 128bd21..d694651 100644 --- a/src/renderer/parameters_context.rs +++ b/src/renderer/parameters_context.rs @@ -179,8 +179,28 @@ impl Walkable for OwnedLiteral { impl CompareContextElement for OwnedLiteral { fn equals(&self, other: &dyn ContextElement) -> bool { - // TODO - false + // If its an OwnedLiteral then compare them directly, + // otherwise defer to the other type's implementation of + // CompareContextElement since the end user could add any + // type. + match other.to_any().downcast_ref::() { + None => other.equals(self), + Some(other_literal) => match (self, other_literal) { + (OwnedLiteral::LString(self_text), OwnedLiteral::LString(other_text)) => { + self_text == other_text + } + (OwnedLiteral::LPositiveInteger(self_num), OwnedLiteral::LString(other_text)) => { + &self_num.to_string() == other_text + } + (OwnedLiteral::LString(self_text), OwnedLiteral::LPositiveInteger(other_num)) => { + self_text == &other_num.to_string() + } + ( + OwnedLiteral::LPositiveInteger(self_num), + OwnedLiteral::LPositiveInteger(other_num), + ) => self_num == other_num, + }, + } } fn partial_compare(&self, other: &dyn ContextElement) -> Option {