private static void HandleFieldValue( HashSet <object> processed, Dictionary <string, IValueNode> fieldValues, InputField field, IInputType fieldType, object fieldValue) { if (fieldValue == null) { fieldValues[field.Name] = NullValueNode.Default; } else if (fieldType.IsNonNullType()) { HandleFieldValue(processed, fieldValues, field, (IInputType)fieldType.InnerType(), fieldValue); } else if (fieldType.IsListType()) { fieldValues[field.Name] = ParseList( processed, fieldType, fieldValue); } else if (fieldType.IsScalarType() || fieldType.IsEnumType()) { fieldValues[field.Name] = ParseScalar( fieldType, fieldValue); } else if (fieldType.IsInputObjectType() && !processed.Contains(fieldValue)) { fieldValues[field.Name] = ParseObject( processed, (InputObjectType)fieldType, fieldValue); } }
private static IValueNode ParseValue( HashSet <object> processed, IInputType inputType, object obj) { if (inputType.IsNonNullType()) { return(ParseValue(processed, (IInputType)inputType.InnerType(), obj)); } else if (inputType.IsListType()) { return(ParseList(processed, inputType, obj)); } else if (inputType.IsScalarType() || inputType.IsEnumType()) { return(ParseScalar(inputType, obj)); } else if (inputType.IsInputObjectType() && !processed.Contains(obj)) { return(ParseObject(processed, (InputObjectType)inputType, obj)); } else { return(NullValueNode.Default); } }
public void CoerceVariableValues( ISchema schema, IReadOnlyList <VariableDefinitionNode> variableDefinitions, IReadOnlyDictionary <string, object?> values, IDictionary <string, VariableValueOrLiteral> coercedValues) { if (schema is null) { throw new ArgumentNullException(nameof(schema)); } if (variableDefinitions is null) { throw new ArgumentNullException(nameof(variableDefinitions)); } if (values is null) { throw new ArgumentNullException(nameof(values)); } if (coercedValues is null) { throw new ArgumentNullException(nameof(coercedValues)); } for (var i = 0; i < variableDefinitions.Count; i++) { VariableDefinitionNode variableDefinition = variableDefinitions[i]; var variableName = variableDefinition.Variable.Name.Value; IInputType variableType = AssertInputType(schema, variableDefinition); VariableValueOrLiteral coercedVariable; var hasValue = values.TryGetValue(variableName, out var value); if (!hasValue && variableDefinition.DefaultValue is { } defaultValue) { value = defaultValue.Kind is SyntaxKind.NullValue ? null : defaultValue; hasValue = true; } if (!hasValue || value is null || value is NullValueNode) { if (variableType.IsNonNullType()) { throw ThrowHelper.NonNullVariableIsNull(variableDefinition); } // if we do not have any value we will not create an entry to the // coerced variables. if (!hasValue) { continue; } coercedVariable = new(variableType, null, NullValueNode.Default); }
public void CoerceVariableValues( ISchema schema, IReadOnlyList <VariableDefinitionNode> variableDefinitions, IReadOnlyDictionary <string, object?> values, IDictionary <string, VariableValue> coercedValues) { if (schema is null) { throw new ArgumentNullException(nameof(schema)); } if (variableDefinitions is null) { throw new ArgumentNullException(nameof(variableDefinitions)); } if (values is null) { throw new ArgumentNullException(nameof(values)); } if (coercedValues is null) { throw new ArgumentNullException(nameof(coercedValues)); } for (var i = 0; i < variableDefinitions.Count; i++) { VariableDefinitionNode variableDefinition = variableDefinitions[i]; var variableName = variableDefinition.Variable.Name.Value; IInputType variableType = AssertInputType(schema, variableDefinition); if (!values.TryGetValue(variableName, out object?value) && variableDefinition.DefaultValue is { } defaultValue) { value = defaultValue.Kind == SyntaxKind.NullValue ? null : defaultValue; } if (value is null || value is NullValueNode) { if (variableType.IsNonNullType()) { throw ThrowHelper.NonNullVariableIsNull(variableDefinition); } coercedValues[variableName] = new VariableValue( variableType, null, NullValueNode.Default); }