Beispiel #1
0
        /// <summary>Apply the <see cref="InputArguments.ContainsKey"/> argument.</summary>
        /// <param name="values">The underlying values to modify.</param>
        /// <param name="argValue">The argument value.</param>
        private IInvariantSet ApplyContains(IEnumerable <string> values, IInputArgumentValue argValue)
        {
            // skip empty search
            if (string.IsNullOrWhiteSpace(argValue.Raw))
            {
                return(InvariantSets.False);
            }

            // get search values
            string[] search = argValue.Parsed;
            if (this.NormalizeValue != null)
            {
                for (int i = 0; i < search.Length; i++)
                {
                    search[i] = this.NormalizeValue(search[i]);
                }
            }

            // get result
            bool found = values is IInvariantSet set
                ? set.Overlaps(search)
                : InvariantSets.From(search).Overlaps(values);

            return(InvariantSets.FromValue(found));
        }
Beispiel #2
0
        /// <summary>Apply the <see cref="InputArguments.ContainsKey"/> argument.</summary>
        /// <param name="values">The underlying values to modify.</param>
        /// <param name="argValue">The argument value.</param>
        private string[] ApplyContains(string[] values, IInputArgumentValue argValue)
        {
            InvariantHashSet search = new(argValue.Parsed.Select(this.NormalizeValue));
            bool             match  = search.Any() && values.Any(value => search.Contains(value));

            return(new[] { match.ToString() });
        }
Beispiel #3
0
        /// <summary>Apply the <see cref="InputArguments.ValueAtKey"/> argument.</summary>
        /// <param name="values">The underlying values to modify.</param>
        /// <param name="argValue">The argument value.</param>
        private string[] ApplyValueAt(string[] values, IInputArgumentValue argValue)
        {
            // parse index
            if (!int.TryParse(argValue.Raw, out int index))
            {
                throw new FormatException($"Invalid '{InputArguments.ValueAtKey}' index '{argValue.Raw}', must be a numeric index."); // should never happen since it's validated before this point
            }
            if (Math.Abs(index) >= values.Length)
            {
                return(new string[0]);
            }

            // get value at index (negative index = from end)
            return(index >= 0
                ? new[] { values[index] }
                : new[] { values[values.Length + index] });
        }
Beispiel #4
0
        /// <summary>Apply the <see cref="InputArguments.ValueAtKey"/> argument.</summary>
        /// <param name="values">The underlying values to modify.</param>
        /// <param name="argValue">The argument value.</param>
        private IInvariantSet ApplyValueAt(IEnumerable <string> values, IInputArgumentValue argValue)
        {
            // parse index
            if (!int.TryParse(argValue.Raw, out int index))
            {
                throw new FormatException($"Invalid '{InputArguments.ValueAtKey}' index '{argValue.Raw}', must be a numeric index."); // should never happen since it's validated before this point
            }
            // get list
            if (values is not IList <string> list)
            {
                list = values.ToArray();
            }

            // get value at index (negative index = from end)
            if (Math.Abs(index) >= list.Count)
            {
                return(InvariantSets.Empty);
            }
            return(InvariantSets.FromValue(index >= 0
                ? list[index]
                : list[list.Count + index]
                                           ));
        }
 /*********
 ** Private methods
 *********/
 /// <summary>Get the string representation for an input argument.</summary>
 /// <param name="input">The input argument.</param>
 private string Stringify(IInputArgumentValue input)
 {
     return(string.Join(", ", input.Parsed));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="InputArgument" /> class.
 /// </summary>
 /// <param name="argument">The field argument defined in a schema.</param>
 /// <param name="value">The value representing this field argument as its defined in a query document.</param>
 public InputArgument(IGraphFieldArgument argument, IInputArgumentValue value)
 {
     this.Argument = Validation.ThrowIfNullOrReturn(argument, nameof(argument));
     this.Value    = Validation.ThrowIfNullOrReturn(value, nameof(value));
 }
Beispiel #7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ArgumentGenerationResult"/> class.
 /// </summary>
 /// <param name="argument">The argument that was successfully resolved.</param>
 public ArgumentGenerationResult(IInputArgumentValue argument)
 {
     this.Argument = argument;
 }