Ejemplo n.º 1
0
        private ArgumentValue CreateArgumentValue(
            string responseName,
            IInputField argument,
            ArgumentNode?argumentValue,
            IValueNode value,
            bool isDefaultValue)
        {
            ArgumentNonNullValidator.ValidationResult validationResult =
                ArgumentNonNullValidator.Validate(argument, value, Path.New(argument.Name));

            if (argumentValue is not null && validationResult.HasErrors)
            {
                return(new ArgumentValue(
                           argument,
                           ErrorHelper.ArgumentNonNullError(
                               argumentValue,
                               responseName,
                               validationResult)));
            }

            if (argument.Type.IsLeafType() && CanBeCompiled(value))
            {
                try
                {
                    return(new ArgumentValue(
                               argument,
                               value.GetValueKind(),
                               true,
                               isDefaultValue,
                               ParseLiteral(argument, value),
                               value));
                }
                catch (SerializationException ex)
                {
                    if (argumentValue is not null)
                    {
                        return(new ArgumentValue(
                                   argument,
                                   ErrorHelper.ArgumentValueIsInvalid(argumentValue, responseName, ex)));
                    }

                    return(new ArgumentValue(
                               argument,
                               ErrorHelper.ArgumentDefaultValueIsInvalid(responseName, ex)));
                }
            }

            return(new ArgumentValue(
                       argument,
                       value.GetValueKind(),
                       false,
                       isDefaultValue,
                       null,
                       value));
        }