/// <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)); }
/// <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() }); }
/// <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] }); }
/// <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)); }
/// <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; }