private static OperationOutcome validateMinMaxValue(Validator me, Element definition, IElementNavigator instance, int comparisonOutcome, string elementName) { var outcome = new OperationOutcome(); if (definition != null) { // Min/max are only defined for ordered types if (definition.GetType().IsOrderedFhirType()) { try { var instanceValue = instance.GetComparableValue(definition.GetType()); if (instanceValue != null) { if (Compare(instanceValue, definition) == comparisonOutcome) { var label = comparisonOutcome == -1 ? "smaller than" : comparisonOutcome == 0 ? "equal to" : "larger than"; var issue = comparisonOutcome == -1 ? Issue.CONTENT_ELEMENT_PRIMITIVE_VALUE_TOO_SMALL : Issue.CONTENT_ELEMENT_PRIMITIVE_VALUE_TOO_LARGE; outcome.AddIssue($"Instance value '{instanceValue}' is {label} {elementName} '{definition}'", issue, instance); } } } catch (NotSupportedException ns) { outcome.AddIssue($"Comparing the instance against the {elementName} failed: {ns.Message}", Issue.UNSUPPORTED_MIN_MAX_QUANTITY, instance); } } else { me.Trace(outcome, $"{elementName} was given in ElementDefinition, but type '{definition.TypeName}' is not an ordered type", Issue.PROFILE_ELEMENTDEF_MIN_MAX_USES_UNORDERED_TYPE, instance); } } return(outcome); }