public void AddSource(GeneratorExecutionContext context, INamedTypeSymbol generatingForType, TypeAttachmentMetadata metadata, GenerationOptions options)
        {
            var code = WrapSourceOutput(generatingForType, CreateSource(generatingForType.Name));

            context.AddSource(GetGeneratedFileName(generatingForType, "BsonSerializer"), code);

            metadata.AddAttributeLiteral($"BsonSerializer(typeof({generatingForType.Name}.{generatingForType.Name}BsonSerialiser))");
            metadata.AddNamespace("MongoDB.Bson.Serialization.Attributes");
        }
        public void AddSource(GeneratorExecutionContext context, INamedTypeSymbol generatingForType, TypeAttachmentMetadata metadata, GenerationOptions options)
        {
            var code = WrapSourceOutput(generatingForType, CreateSource(generatingForType));

            context.AddSource(GetGeneratedFileName(generatingForType, "TypeConverter"), code);

            metadata.AddAttributeLiteral($"TypeConverter(typeof({generatingForType.Name}.{generatingForType.Name}TypeConverter))");
            metadata.AddNamespace("System.ComponentModel");
        }
        public void CreateTypeExtension(GeneratorExecutionContext context, INamedTypeSymbol extendingTypeSymbol, GenerationOptions options)
        {
            var metadata = new TypeAttachmentMetadata();

            // We're going to need System regardless.
            metadata.AddNamespace("System");

            foreach (var converter in _converters)
            {
                if (converter.ShouldGenerate(context, extendingTypeSymbol, options))
                {
                    converter.AddSource(context, extendingTypeSymbol, metadata, options);
                }
            }

            var code = WrapSourceOutput(extendingTypeSymbol, FormatType(extendingTypeSymbol, metadata));

            context.AddSource(GetGeneratedFileName(extendingTypeSymbol, "Generated"), code);
        }