NotesStringYamlConverter.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. public bool Accepts(Type type) => type == typeof(string);
  7. public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer) {
  8. Scalar scalar = parser.Consume<Scalar>();
  9. return scalar.Value;
  10. }
  11. public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer) {
  12. if (value is null) {
  13. emitter.Emit(new Scalar(
  14. AnchorName.Empty,
  15. TagName.Empty,
  16. "",
  17. ScalarStyle.Plain,
  18. true,
  19. true));
  20. return;
  21. }
  22. var s = (string)value;
  23. if (s.Contains('\n'))
  24. // Literal block style (|)
  25. emitter.Emit(new Scalar(
  26. AnchorName.Empty,
  27. TagName.Empty,
  28. s,
  29. ScalarStyle.Literal,
  30. true,
  31. false));
  32. else
  33. emitter.Emit(new Scalar(s));
  34. }
  35. }