ClassRecordGenerator.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System.Text;
  2. namespace CodeGenerators;
  3. public class ClassRecordGenerator : IGenerator
  4. {
  5. public List<string> Usings { get; } = new();
  6. public Dictionary<string, IGenerator> Properties { get; set; } = new();
  7. private readonly string namespaceName;
  8. private readonly string name;
  9. private readonly bool isRecord;
  10. public ClassRecordGenerator(string namespaceName, string name, bool isRecord = false)
  11. {
  12. this.namespaceName = namespaceName;
  13. this.name = Helpers.SanitizeName(name);
  14. this.isRecord = isRecord;
  15. }
  16. public string Build(int indent = 0)
  17. {
  18. var sb = new StringBuilder();
  19. if (Usings.Any())
  20. {
  21. foreach (var usingItem in Usings.Distinct())
  22. sb.AppendLine($"using {usingItem};");
  23. sb.AppendLine();
  24. }
  25. sb.AppendLine($"namespace {namespaceName};");
  26. sb.AppendLine();
  27. sb.AppendLine($"public {(isRecord ? "record" : "class")} {name}\n{{");
  28. if (Properties.Any())
  29. sb.AppendLine(string.Join("\n\n", Properties.Select(x => x.Value.Build(indent+1))));
  30. sb.AppendLine("}");
  31. return sb.ToString();
  32. }
  33. }