using static MapTo.Sources.Constants; namespace MapTo.Sources { internal static class EfAddMethodsAttributeSource { internal const string AttributeName = "EfAddMethods"; internal const string AttributeClassName = AttributeName + "Attribute"; internal const string FullyQualifiedName = RootNamespace + "." + AttributeClassName; internal static SourceCode Generate(SourceGenerationOptions options) { using var builder = new SourceBuilder() .WriteLine(GeneratedFilesHeader) .WriteLine("using System;") .WriteLine() .WriteLine($"namespace {RootNamespace}") .WriteOpeningBracket(); if (options.GenerateXmlDocument) { builder .WriteLine("/// ") .WriteLine("/// Generate Add methods for interacting with the entity") .WriteLine("/// "); } builder .WriteLine("[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]") .WriteLine($"public sealed class {AttributeName}Attribute : Attribute") .WriteOpeningBracket(); builder .WriteLine($"public {AttributeName}Attribute(Type createType = null, Type returnType = null){"{}"}") .WriteLine(); builder .WriteClosingBracket() // class .WriteClosingBracket(); // namespace return new(builder.ToString(), $"{AttributeName}Attribute.g.cs"); } } }