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); }
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); } } }
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); }
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); } }
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); }
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); } }
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); } }
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); } } }
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); } }