NotesStringYamlConverter.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using YamlDotNet.Core;
  2. using YamlDotNet.Core.Events;
  3. using YamlDotNet.Serialization;
  4. namespace RackPeek.Domain.Persistence.Yaml;
  5. public sealed class NotesStringYamlConverter : IYamlTypeConverter
  6. {
  7. public bool Accepts(Type type)
  8. {
  9. return type == typeof(string);
  10. }
  11. public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer)
  12. {
  13. var scalar = parser.Consume<Scalar>();
  14. return scalar.Value;
  15. }
  16. public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer)
  17. {
  18. if (value is null)
  19. {
  20. emitter.Emit(new Scalar(
  21. AnchorName.Empty,
  22. TagName.Empty,
  23. "",
  24. ScalarStyle.Plain,
  25. true,
  26. true));
  27. return;
  28. }
  29. var s = (string)value;
  30. if (s.Contains('\n'))
  31. // Literal block style (|)
  32. emitter.Emit(new Scalar(
  33. AnchorName.Empty,
  34. TagName.Empty,
  35. s,
  36. ScalarStyle.Literal,
  37. true,
  38. false));
  39. else
  40. emitter.Emit(new Scalar(s));
  41. }
  42. }