// Copyright (c) Microsoft. All rights reserved. using System.Globalization; using Microsoft.PowerFx; using Microsoft.PowerFx.Types; namespace Microsoft.Agents.ObjectModel; /// /// Extension methods for . /// internal static class IntExpressionExtensions { /// /// Evaluates the given using the provided . /// /// Expression to evaluate. /// Recalc engine to use for evaluation. /// The evaluated integer value, or null if the expression is null or cannot be evaluated. internal static long? Eval(this IntExpression? expression, RecalcEngine? engine) { if (expression is null) { return null; } if (expression.IsLiteral) { return expression.LiteralValue; } if (engine is null) { return null; } if (expression.IsExpression) { return (long)engine.Eval(expression.ExpressionText!).AsDouble(); } else if (expression.IsVariableReference) { var formulaValue = engine.Eval(expression.VariableReference!.VariableName); if (formulaValue is NumberValue numberValue) { return (long)numberValue.Value; } if (formulaValue is StringValue stringValue && int.TryParse(stringValue.Value, NumberStyles.Integer, CultureInfo.InvariantCulture, out int result)) { return result; } } return null; } }