Exemplo n.º 1
0
        private async Task WriteVariableAsync(
            CodeWriter writer,
            Descriptors.IArgumentDescriptor argument,
            ITypeLookup typeLookup)
        {
            await writer.WriteIndentAsync().ConfigureAwait(false);

            await writer.WriteAsync("if(_modified_").ConfigureAwait(false);

            await writer.WriteAsync(GetFieldName(argument.Name)).ConfigureAwait(false);

            await writer.WriteAsync(')').ConfigureAwait(false);

            await writer.WriteLineAsync().ConfigureAwait(false);

            await writer.WriteIndentAsync().ConfigureAwait(false);

            await writer.WriteAsync('{').ConfigureAwait(false);

            await writer.WriteLineAsync().ConfigureAwait(false);

            using (writer.IncreaseIndent())
            {
                await writer.WriteIndentAsync().ConfigureAwait(false);

                await writer.WriteAsync("variables.Add(new VariableValue(").ConfigureAwait(false);

                await writer.WriteStringValueAsync(argument.Name).ConfigureAwait(false);

                await writer.WriteAsync(", ").ConfigureAwait(false);

                await writer.WriteStringValueAsync(
                    argument.Type.NamedType().Name)
                .ConfigureAwait(false);

                await writer.WriteAsync(", ").ConfigureAwait(false);

                await writer.WriteAsync(GetPropertyName(argument.Name)).ConfigureAwait(false);

                await writer.WriteAsync(')').ConfigureAwait(false);

                await writer.WriteAsync(')').ConfigureAwait(false);

                await writer.WriteAsync(';').ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);
            }

            await writer.WriteIndentAsync().ConfigureAwait(false);

            await writer.WriteAsync('}').ConfigureAwait(false);

            await writer.WriteLineAsync().ConfigureAwait(false);
        }
Exemplo n.º 2
0
        private async Task WriteFieldsAsync(
            CodeWriter writer,
            IOperationDescriptor descriptor,
            ITypeLookup typeLookup)
        {
            if (descriptor.Arguments.Count > 0)
            {
                for (int i = 0; i < descriptor.Arguments.Count; i++)
                {
                    Descriptors.IArgumentDescriptor argument =
                        descriptor.Arguments[i];

                    await writer.WriteIndentAsync().ConfigureAwait(false);

                    await writer.WriteAsync("private bool _modified_").ConfigureAwait(false);

                    await writer.WriteAsync(GetFieldName(argument.Name)).ConfigureAwait(false);

                    await writer.WriteAsync(';').ConfigureAwait(false);

                    await writer.WriteLineAsync().ConfigureAwait(false);
                }

                await writer.WriteLineAsync().ConfigureAwait(false);

                for (int i = 0; i < descriptor.Arguments.Count; i++)
                {
                    Descriptors.IArgumentDescriptor argument =
                        descriptor.Arguments[i];

                    string typeName = typeLookup.GetTypeName(
                        argument.Type,
                        argument.Type.NamedType().Name,
                        true);

                    await writer.WriteIndentAsync().ConfigureAwait(false);

                    await writer.WriteAsync("private ").ConfigureAwait(false);

                    await writer.WriteAsync(typeName).ConfigureAwait(false);

                    await writer.WriteSpaceAsync().ConfigureAwait(false);

                    await writer.WriteAsync("_value_").ConfigureAwait(false);

                    await writer.WriteAsync(GetFieldName(argument.Name)).ConfigureAwait(false);

                    await writer.WriteAsync(';').ConfigureAwait(false);

                    await writer.WriteLineAsync().ConfigureAwait(false);
                }
            }
        }
Exemplo n.º 3
0
        private static async Task WriteArgumentAsync(
            CodeWriter writer,
            Descriptors.IArgumentDescriptor argument,
            ITypeLookup typeLookup)
        {
            string typeName = typeLookup.GetTypeName(
                argument.Type,
                argument.Type.NamedType().Name,
                true);

            await writer.WriteIndentedLineAsync(
                $"public Optional<{typeName}> {GetPropertyName(argument.Name)} {{ get; set; }}")
            .ConfigureAwait(false);
        }
Exemplo n.º 4
0
        private async Task WriteOperationOverloadAsync(
            CodeWriter writer,
            IOperationDescriptor operation,
            string operationTypeName,
            ITypeLookup typeLookup)
        {
            await WriteOperationSignature(
                writer, operation, operationTypeName, false, typeLookup)
            .ConfigureAwait(false);

            using (writer.IncreaseIndent())
            {
                await writer.WriteIndentAsync().ConfigureAwait(false);

                await writer.WriteAsync(
                    $"{GetPropertyName(operation.Operation.Name.Value)}Async(")
                .ConfigureAwait(false);

                for (int j = 0; j < operation.Arguments.Count; j++)
                {
                    Descriptors.IArgumentDescriptor argument =
                        operation.Arguments[j];

                    if (j > 0)
                    {
                        await writer.WriteAsync(',').ConfigureAwait(false);

                        await writer.WriteSpaceAsync().ConfigureAwait(false);
                    }

                    await writer.WriteAsync(GetFieldName(argument.Name)).ConfigureAwait(false);
                }

                if (operation.Arguments.Count > 0)
                {
                    await writer.WriteAsync(',').ConfigureAwait(false);

                    await writer.WriteSpaceAsync().ConfigureAwait(false);
                }

                await writer.WriteAsync("CancellationToken.None").ConfigureAwait(false);

                await writer.WriteAsync(')').ConfigureAwait(false);

                await writer.WriteAsync(';').ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);
            }
        }
Exemplo n.º 5
0
        private static async Task WriteVariableAsync(
            CodeWriter writer,
            Descriptors.IArgumentDescriptor argument,
            ITypeLookup typeLookup)
        {
            await writer.WriteIndentedLineAsync(
                $"if ({GetPropertyName(argument.Name)}.HasValue)")
            .ConfigureAwait(false);

            await writer.WriteIndentedLineAsync("{").ConfigureAwait(false);

            using (writer.IncreaseIndent())
            {
                await writer.WriteIndentAsync().ConfigureAwait(false);

                await writer.WriteAsync("variables.Add(new VariableValue(").ConfigureAwait(false);

                await writer.WriteStringValueAsync(argument.Name).ConfigureAwait(false);

                await writer.WriteAsync(", ").ConfigureAwait(false);

                await writer.WriteStringValueAsync(
                    argument.Type.NamedType().Name)
                .ConfigureAwait(false);

                await writer.WriteAsync(", ").ConfigureAwait(false);

                await writer.WriteAsync(GetPropertyName(argument.Name)).ConfigureAwait(false);

                await writer.WriteAsync(".Value").ConfigureAwait(false);

                await writer.WriteAsync(')').ConfigureAwait(false);

                await writer.WriteAsync(')').ConfigureAwait(false);

                await writer.WriteAsync(';').ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);
            }

            await writer.WriteIndentedLineAsync("}").ConfigureAwait(false);
        }
Exemplo n.º 6
0
        private async Task WriteArgumentAsync(
            CodeWriter writer,
            Descriptors.IArgumentDescriptor argument,
            ITypeLookup typeLookup)
        {
            string typeName = typeLookup.GetTypeName(
                argument.Type,
                argument.Type.NamedType().Name,
                true);

            await writer.WriteIndentAsync().ConfigureAwait(false);

            await writer.WriteAsync("public ").ConfigureAwait(false);

            await writer.WriteAsync(typeName).ConfigureAwait(false);

            await writer.WriteSpaceAsync().ConfigureAwait(false);

            await writer.WriteAsync(GetPropertyName(argument.Name)).ConfigureAwait(false);

            await writer.WriteLineAsync().ConfigureAwait(false);

            await writer.WriteIndentAsync().ConfigureAwait(false);

            await writer.WriteAsync('{').ConfigureAwait(false);

            await writer.WriteLineAsync().ConfigureAwait(false);

            using (writer.IncreaseIndent())
            {
                await writer.WriteIndentAsync().ConfigureAwait(false);

                await writer.WriteAsync("get => ").ConfigureAwait(false);

                await writer.WriteAsync("_value_").ConfigureAwait(false);

                await writer.WriteAsync(GetFieldName(argument.Name)).ConfigureAwait(false);

                await writer.WriteAsync(';').ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);

                await writer.WriteIndentAsync().ConfigureAwait(false);

                await writer.WriteAsync("set").ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);

                await writer.WriteIndentAsync().ConfigureAwait(false);

                await writer.WriteAsync('{').ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);

                using (writer.IncreaseIndent())
                {
                    await writer.WriteIndentAsync().ConfigureAwait(false);

                    await writer.WriteAsync("_value_").ConfigureAwait(false);

                    await writer.WriteAsync(GetFieldName(argument.Name)).ConfigureAwait(false);

                    await writer.WriteAsync(" = value;").ConfigureAwait(false);

                    await writer.WriteLineAsync().ConfigureAwait(false);

                    await writer.WriteIndentAsync().ConfigureAwait(false);

                    await writer.WriteAsync("_modified_").ConfigureAwait(false);

                    await writer.WriteAsync(GetFieldName(argument.Name)).ConfigureAwait(false);

                    await writer.WriteAsync(" = true;").ConfigureAwait(false);

                    await writer.WriteLineAsync().ConfigureAwait(false);
                }

                await writer.WriteIndentAsync().ConfigureAwait(false);

                await writer.WriteAsync('}').ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);
            }

            await writer.WriteIndentAsync().ConfigureAwait(false);

            await writer.WriteAsync('}').ConfigureAwait(false);

            await writer.WriteLineAsync().ConfigureAwait(false);
        }
        private async Task WriteOperationAsync(
            CodeWriter writer,
            IOperationDescriptor operation,
            string operationTypeName,
            bool cancellationToken,
            ITypeLookup typeLookup)
        {
            await writer.WriteIndentAsync().ConfigureAwait(false);

            if (operation.Operation.Operation == OperationType.Subscription)
            {
                await writer.WriteAsync(
                    $"Task<IResponseStream<{operationTypeName}>> ")
                .ConfigureAwait(false);
            }
            else
            {
                await writer.WriteAsync(
                    $"Task<IOperationResult<{operationTypeName}>> ")
                .ConfigureAwait(false);
            }
            await writer.WriteAsync(
                $"{GetPropertyName(operation.Operation.Name.Value)}Async(")
            .ConfigureAwait(false);

            using (writer.IncreaseIndent())
            {
                for (int j = 0; j < operation.Arguments.Count; j++)
                {
                    Descriptors.IArgumentDescriptor argument =
                        operation.Arguments[j];

                    if (j > 0)
                    {
                        await writer.WriteAsync(',').ConfigureAwait(false);
                    }

                    await writer.WriteLineAsync().ConfigureAwait(false);

                    string argumentType = typeLookup.GetTypeName(
                        argument.Type,
                        argument.Type.NamedType().Name,
                        true);

                    await writer.WriteIndentAsync().ConfigureAwait(false);

                    await writer.WriteAsync(argumentType).ConfigureAwait(false);

                    await writer.WriteSpaceAsync().ConfigureAwait(false);

                    await writer.WriteAsync(GetFieldName(argument.Name))
                    .ConfigureAwait(false);
                }

                if (cancellationToken)
                {
                    if (operation.Arguments.Count > 0)
                    {
                        await writer.WriteAsync(',').ConfigureAwait(false);
                    }

                    await writer.WriteLineAsync().ConfigureAwait(false);

                    await writer.WriteIndentAsync().ConfigureAwait(false);

                    await writer.WriteAsync(
                        "CancellationToken cancellationToken")
                    .ConfigureAwait(false);
                }

                await writer.WriteAsync(')').ConfigureAwait(false);

                await writer.WriteAsync(';').ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);
            }
        }
Exemplo n.º 8
0
        private async Task WriteCreateOperationAsync(
            CodeWriter writer,
            IOperationDescriptor operation,
            ITypeLookup typeLookup)
        {
            await writer.WriteIndentAsync().ConfigureAwait(false);

            await writer.WriteAsync("new ").ConfigureAwait(false);

            await writer.WriteAsync(operation.Name).ConfigureAwait(false);

            if (operation.Arguments.Count == 0)
            {
                await writer.WriteAsync("(),").ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);
            }
            else if (operation.Arguments.Count == 1)
            {
                await writer.WriteAsync(" {").ConfigureAwait(false);

                Descriptors.IArgumentDescriptor argument =
                    operation.Arguments[0];

                await writer.WriteAsync(GetPropertyName(argument.Name)).ConfigureAwait(false);

                await writer.WriteAsync(" = ").ConfigureAwait(false);

                await writer.WriteAsync(GetFieldName(argument.Name)).ConfigureAwait(false);

                await writer.WriteAsync(" },").ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);
            }
            else
            {
                await writer.WriteLineAsync().ConfigureAwait(false);

                await writer.WriteIndentAsync().ConfigureAwait(false);

                await writer.WriteAsync('{').ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);

                using (writer.IncreaseIndent())
                {
                    for (int i = 0; i < operation.Arguments.Count; i++)
                    {
                        Descriptors.IArgumentDescriptor argument =
                            operation.Arguments[i];

                        await writer.WriteIndentAsync().ConfigureAwait(false);

                        await writer.WriteAsync(GetPropertyName(argument.Name))
                        .ConfigureAwait(false);

                        await writer.WriteAsync(" = ").ConfigureAwait(false);

                        await writer.WriteAsync(GetFieldName(argument.Name))
                        .ConfigureAwait(false);

                        await writer.WriteLineAsync().ConfigureAwait(false);
                    }
                }

                await writer.WriteIndentAsync().ConfigureAwait(false);

                await writer.WriteAsync("},").ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);
            }
        }
Exemplo n.º 9
0
        private async Task WriteOperationNullChecksAsync(
            CodeWriter writer,
            IOperationDescriptor operation,
            ITypeLookup typeLookup)
        {
            int checks = 0;

            for (int j = 0; j < operation.Arguments.Count; j++)
            {
                Descriptors.IArgumentDescriptor argument =
                    operation.Arguments[j];

                bool needsNullCheck = argument.Type.IsNonNullType();

                if (needsNullCheck && argument.Type.IsLeafType())
                {
                    ITypeInfo argumentType = typeLookup.GetTypeInfo(
                        argument.Type,
                        true);
                    needsNullCheck = !argumentType.IsValueType;
                }

                if (argument.Type.IsNonNullType())
                {
                    if (checks > 0)
                    {
                        await writer.WriteLineAsync().ConfigureAwait(false);
                    }

                    checks++;

                    await writer.WriteIndentAsync().ConfigureAwait(false);

                    await writer.WriteAsync($"if ({argument.Name} is null)")
                    .ConfigureAwait(false);

                    await writer.WriteLineAsync().ConfigureAwait(false);

                    await writer.WriteIndentAsync().ConfigureAwait(false);

                    await writer.WriteAsync('{').ConfigureAwait(false);

                    await writer.WriteLineAsync().ConfigureAwait(false);

                    using (writer.IncreaseIndent())
                    {
                        await writer.WriteIndentAsync().ConfigureAwait(false);

                        await writer.WriteAsync(
                            $"throw new ArgumentNullException(nameof({argument.Name}));")
                        .ConfigureAwait(false);

                        await writer.WriteLineAsync().ConfigureAwait(false);
                    }

                    await writer.WriteIndentAsync().ConfigureAwait(false);

                    await writer.WriteAsync('}').ConfigureAwait(false);

                    await writer.WriteLineAsync().ConfigureAwait(false);
                }
            }
        }
Exemplo n.º 10
0
        private static async Task WriteOperationSignatureAsync(
            CodeWriter writer,
            IOperationDescriptor operation,
            string operationTypeName,
            ITypeLookup typeLookup)
        {
            await writer.WriteIndentAsync().ConfigureAwait(false);

            await writer.WriteAsync("public ").ConfigureAwait(false);

            if (operation.Operation.Operation == OperationType.Subscription)
            {
                await writer.WriteAsync(
                    "global::System.Threading.Tasks.Task<" +
                    $"global::StrawberryShake.IResponseStream<{operationTypeName}>> ")
                .ConfigureAwait(false);
            }
            else
            {
                await writer.WriteAsync(
                    "global::System.Threading.Tasks.Task<" +
                    $"global::StrawberryShake.IOperationResult<{operationTypeName}>> ")
                .ConfigureAwait(false);
            }
            await writer.WriteAsync(
                $"{GetPropertyName(operation.Operation.Name!.Value)}Async(")
            .ConfigureAwait(false);

            using (writer.IncreaseIndent())
            {
                for (int j = 0; j < operation.Arguments.Count; j++)
                {
                    Descriptors.IArgumentDescriptor argument =
                        operation.Arguments[j];

                    if (j > 0)
                    {
                        await writer.WriteAsync(',')
                        .ConfigureAwait(false);
                    }

                    await writer.WriteLineAsync()
                    .ConfigureAwait(false);

                    string argumentType = typeLookup.GetTypeName(
                        argument.Type,
                        argument.Type.NamedType().Name,
                        true);

                    await writer.WriteIndentAsync().ConfigureAwait(false);

                    await writer.WriteAsync(
                        $"global::StrawberryShake.Optional<{argumentType}>")
                    .ConfigureAwait(false);

                    await writer.WriteSpaceAsync().ConfigureAwait(false);

                    await writer.WriteAsync(GetFieldName(argument.Name)).ConfigureAwait(false);

                    await writer.WriteAsync(" = default").ConfigureAwait(false);
                }

                if (operation.Arguments.Count > 0)
                {
                    await writer.WriteAsync(',').ConfigureAwait(false);
                }
                await writer.WriteLineAsync().ConfigureAwait(false);

                await writer.WriteIndentAsync().ConfigureAwait(false);

                await writer.WriteAsync(
                    "global::System.Threading.CancellationToken cancellationToken = default")
                .ConfigureAwait(false);

                await writer.WriteAsync(')').ConfigureAwait(false);

                await writer.WriteLineAsync().ConfigureAwait(false);
            }
        }