protected override async Task WriteAsync( CodeWriter writer, IInputClassDescriptor descriptor, ITypeLookup typeLookup) { await writer.WriteIndentAsync().ConfigureAwait(false); await writer.WriteAsync("public class ").ConfigureAwait(false); await writer.WriteAsync(descriptor.Name).ConfigureAwait(false); await writer.WriteLineAsync().ConfigureAwait(false); await writer.WriteIndentAsync().ConfigureAwait(false); await writer.WriteLeftBraceAsync().ConfigureAwait(false); await writer.WriteLineAsync().ConfigureAwait(false); using (writer.IncreaseIndent()) { for (int i = 0; i < descriptor.Fields.Count; i++) { IInputFieldDescriptor fieldDescriptor = descriptor.Fields[i]; string typeName = typeLookup.GetTypeName( fieldDescriptor.Type, fieldDescriptor.InputObjectType?.Name, false); if (i > 0) { await writer.WriteLineAsync().ConfigureAwait(false); } await writer.WriteIndentAsync().ConfigureAwait(false); await writer.WriteAsync($"public Optional<{typeName}>") .ConfigureAwait(false); await writer.WriteSpaceAsync().ConfigureAwait(false); await writer.WriteAsync(GetPropertyName(fieldDescriptor.Name)) .ConfigureAwait(false); await writer.WriteSpaceAsync().ConfigureAwait(false); await writer.WriteAsync("{ get; set; }").ConfigureAwait(false); await writer.WriteLineAsync().ConfigureAwait(false); } } await writer.WriteIndentAsync().ConfigureAwait(false); await writer.WriteRightBraceAsync().ConfigureAwait(false); await writer.WriteLineAsync().ConfigureAwait(false); }
private static async Task WriteInitializationAsync( CodeWriter writer, IInputClassDescriptor descriptor) { var serializers = new HashSet <string>(); await writer.WriteIndentedLineAsync( "public void Initialize(IValueSerializerCollection serializerResolver)") .ConfigureAwait(false); await writer.WriteIndentedLineAsync("{").ConfigureAwait(false); using (writer.IncreaseIndent()) { await writer.WriteIndentedLineAsync("if (serializerResolver is null)") .ConfigureAwait(false); await writer.WriteIndentedLineAsync("{").ConfigureAwait(false); using (writer.IncreaseIndent()) { await writer.WriteIndentedLineAsync( "throw new ArgumentNullException(nameof(serializerResolver));") .ConfigureAwait(false); } await writer.WriteIndentedLineAsync("}").ConfigureAwait(false); for (int i = 0; i < descriptor.Fields.Count; i++) { IInputFieldDescriptor field = descriptor.Fields[i]; string typeName = field.InputObjectType is null ? field.Type.NamedType().Name.Value : field.InputObjectType.Name; if (serializers.Add(typeName)) { await writer.WriteIndentAsync().ConfigureAwait(false); await writer.WriteAsync('_').ConfigureAwait(false); await writer.WriteAsync(GetFieldName(typeName)).ConfigureAwait(false); await writer.WriteAsync("Serializer = ").ConfigureAwait(false); await writer.WriteAsync( $"serializerResolver.Get(\"{typeName}\");") .ConfigureAwait(false); await writer.WriteLineAsync().ConfigureAwait(false); } } await writer.WriteIndentedLineAsync("_needsInitialization = false;") .ConfigureAwait(false); } await writer.WriteIndentedLineAsync("}").ConfigureAwait(false); }
private async Task WriteConstructorAsync( CodeWriter writer, IInputClassDescriptor descriptor) { await writer.WriteIndentAsync(); await writer.WriteAsync("public "); await writer.WriteAsync(descriptor.Name); await writer.WriteAsync("Serializer"); await writer.WriteAsync("(IEnumerable<IValueSerializer> serializers)"); await writer.WriteLineAsync(); await writer.WriteIndentAsync(); await writer.WriteAsync('{'); await writer.WriteLineAsync(); using (writer.IncreaseIndent()) { await writer.WriteIndentAsync(); await writer.WriteAsync("IReadOnlyDictionary<string, IValueSerializer> map = "); await writer.WriteAsync("serializers.ToDictionary();"); await writer.WriteLineAsync(); for (int i = 0; i < descriptor.Fields.Count; i++) { IInputFieldDescriptor field = descriptor.Fields[i]; string typeName = field.InputObjectType is null ? field.Type.NamedType().Name.Value : field.InputObjectType.Name; string serializerType = i == 0 ? "IValueSerializer " : string.Empty; await writer.WriteLineAsync(); await writer.WriteIndentAsync(); await writer.WriteAsync( "if (!map.TryGetValue" + $"(\"{typeName}\", out {serializerType}serializer))"); await writer.WriteLineAsync(); await writer.WriteIndentAsync(); await writer.WriteAsync('{'); await writer.WriteLineAsync(); using (writer.IncreaseIndent()) { await writer.WriteIndentAsync(); await writer.WriteAsync("throw new ArgumentException("); await writer.WriteLineAsync(); using (writer.IncreaseIndent()) { await writer.WriteIndentAsync(); await writer.WriteAsync( "\"There is no serializer specified for " + $"`{typeName}`.\","); await writer.WriteLineAsync(); await writer.WriteIndentAsync(); await writer.WriteAsync("nameof(serializers));"); await writer.WriteLineAsync(); } } await writer.WriteIndentAsync(); await writer.WriteAsync('}'); await writer.WriteLineAsync(); await writer.WriteIndentAsync(); await writer.WriteAsync('_'); await writer.WriteAsync(GetFieldName(typeName)); await writer.WriteAsync("Serializer = serializer;"); await writer.WriteLineAsync(); } } await writer.WriteIndentAsync(); await writer.WriteAsync('}'); await writer.WriteLineAsync(); }