You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

SerializationSourceGenerator.OptionsSource.cs 1.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. namespace Discord.Net.SourceGenerators.Serialization
  4. {
  5. public partial class SerializationSourceGenerator
  6. {
  7. private static string GenerateSerializerOptionsSourceCode(
  8. string @namespace,
  9. IEnumerable<SerializedType> converters)
  10. {
  11. var snippets = string.Join("\n",
  12. converters.Select(
  13. x => $" options.Converters.Add(new {@namespace}.Internal.Converters.{x.ConverterTypeName}());"));
  14. return $@"using System;
  15. using System.Text.Json;
  16. using Discord.Net.Serialization.Converters;
  17. namespace {@namespace}
  18. {{
  19. /// <summary>
  20. /// Defines extension methods for adding Discord.Net JSON converters to a
  21. /// <see cref=""JsonSerializerOptions""/> instance.
  22. /// </summary>
  23. public static class JsonSerializerOptionsExtensions
  24. {{
  25. /// <summary>
  26. /// Adds Discord.Net JSON converters to the passed
  27. /// <see cref=""JsonSerializerOptions""/>.
  28. /// </summary>
  29. /// <param name=""options"">
  30. /// The serializer options to add Discord.Net converters to.
  31. /// </param>
  32. /// <returns>
  33. /// The modified <see cref=""JsonSerializerOptions""/>, so this method
  34. /// can be chained.
  35. /// </returns>
  36. public static JsonSerializerOptions WithDiscordNetConverters(
  37. this JsonSerializerOptions options)
  38. {{
  39. options.Converters.Add(new OptionalConverterFactory());
  40. {snippets}
  41. return options;
  42. }}
  43. }}
  44. }}";
  45. }
  46. }
  47. }