private IEnumerable <SourceNode> ResolveLeaps(SourceNode node, IList <SourceNode> previous) { IList <SourceNode> result = new List <SourceNode>(); switch (node.Kind) { case SourceNodeKind.Leap: result.Add(SourceNode.Leap(ResolveKey(node, previous), node.Data)); break; case SourceNodeKind.Root: case SourceNodeKind.Nested: var nonNullPrevious = previous ?? Enumerable.Empty <SourceNode>(); var nextPrevious = nonNullPrevious.Concat(new[] { node }).ToArray(); foreach (var childNode in node.Children) { var childLeaps = ResolveLeaps(childNode, nextPrevious); foreach (var childLeap in childLeaps) { result.Add(childLeap); } } break; default: throw new ArgumentException($"Unable to flatten node kind {node.Kind}. Key: {node.Key}", nameof(node)); } return(result); }
private SourceNode VisitScalarNode(KeyValuePair <YamlNode, YamlNode> nodePair) { return(SourceNode.Leap( GetScalarNodeKey(nodePair.Key), GetScalarNodeValue(nodePair.Value))); }