コード例 #1
0
 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);
     }
 }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
    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);
            }
コード例 #4
0
        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);
                }