internal static object Take()

in src/PSRule.Rules.Azure/Data/Template/Functions.cs [690:720]


    internal static object Take(ITemplateContext context, object[] args)
    {
        if (CountArgs(args) != 2)
            throw ArgumentsOutOfRange(nameof(Take), args);

        if (!ExpressionHelpers.TryInt(args[1], out var numberToTake))
            throw ArgumentInvalidInteger(nameof(Take), nameof(numberToTake));

        var take = numberToTake <= 0 ? 0 : numberToTake;
        if (ExpressionHelpers.TryString(args[0], out var soriginalValue))
        {
            if (take <= 0)
                return string.Empty;

            take = take > soriginalValue.Length ? soriginalValue.Length : take;
            return soriginalValue.Substring(0, take);
        }
        else if (TryJArray(args[0], out var aoriginalvalue))
        {
            if (take <= 0)
                return new JArray();

            var result = new JArray();
            for (var i = 0; i < aoriginalvalue.Count && i < take; i++)
                result.Add(aoriginalvalue[i]);

            return result;
        }

        throw ArgumentFormatInvalid(nameof(Take));
    }