25 public bool Accepts(Type type)
27 return type == typeof(IPAddress);
30 public object ReadYaml(IParser parser, Type type)
32 var value = parser.Consume<Scalar>().Value;
33 if (IPAddress.TryParse(value, out var ipAddress))
40 public void WriteYaml(IEmitter emitter,
object value, Type type)
42 if (value is IPAddress ipAddress)
44 emitter.Emit(
new Scalar(ipAddress.ToString()));
48 emitter.Emit(
new Scalar(
null));
51 public object ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer)
53 IPAddress retVal =
null;
60 if (
true == parser.Accept<MappingStart>(out _))
62 parser.Consume<MappingStart>();
63 parser.Consume<Scalar>();
64 value = parser.Consume<Scalar>().Value;
65 parser.Consume<MappingEnd>();
68 value = parser.Consume<Scalar>().Value;
71 if (
false ==
string.IsNullOrWhiteSpace(value) &&
false ==
"null".Equals(value.Trim(), StringComparison.OrdinalIgnoreCase))
72 if (
false == IPAddress.TryParse(value.Trim(), out retVal))
73 throw new YamlException($
"Invalid IP address format: {value}");
78 public void WriteYaml(IEmitter emitter,
object value, Type type, ObjectSerializer serializer)
80 if (value is IPAddress ipAddress)
83 emitter.Emit(
new MappingStart());
85 emitter.Emit(
new Scalar(
"ipAddress"));
86 serializer(ipAddress.ToString());
88 emitter.Emit(
new MappingEnd());
90 else if (value ==
null)
94 emitter.Emit(
new Scalar(
"null"));
98 throw new ArgumentException(
"Expected an IPAddress object.", nameof(value));