private static ISettingsNode ConvertNode(YamlScalarNode node, string name) { var scalar = ConvertToScalar(node); if (!Schema.TryParse(scalar, true, out _, out var value)) { throw new YamlException($"Can't parse scalar '{scalar}'"); } return(new ValueNode(name, FormatAsString(value))); }
private static object ReadEvent(EventReader reader) { // Read a plain scalar and decode it to a C# value if (reader.Accept <Scalar>()) { var scalar = reader.Expect <Scalar>(); // We try to parse scalar with an extended YamlSchema // If we find a int,double... -> convert it to the proper C# type string defaultTag; object value; return(DefaultSchema.TryParse(scalar, true, out defaultTag, out value) ? value : scalar.Value); } // Read a YAML sequence to a ScriptArray if (reader.Accept <SequenceStart>()) { var array = new ScriptArray(); reader.Expect <SequenceStart>(); while (!reader.Accept <SequenceEnd>()) { array.Add(ReadEvent(reader)); } reader.Expect <SequenceEnd>(); return(array); } // Read a YAML mapping to a ScriptObject if (reader.Accept <MappingStart>()) { var obj = new ScriptObject(); reader.Expect <MappingStart>(); while (!reader.Accept <MappingEnd>()) { var key = ReadEvent(reader).ToString(); var value = ReadEvent(reader); try { obj.Add(key, value); } catch (ArgumentException err) { throw new YamlException(reader.Parser.Current.Start, reader.Parser.Current.End, "Duplicate key", err); } } reader.Expect <MappingEnd>(); return(obj); } throw new YamlException(reader.Parser.Current.Start, reader.Parser.Current.End, $"Unsupported Yaml Event {reader.Parser.Current}"); }