示例#1
0
        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);
        }
示例#2
0
 private SourceNode VisitScalarNode(KeyValuePair <YamlNode, YamlNode> nodePair)
 {
     return(SourceNode.Leap(
                GetScalarNodeKey(nodePair.Key),
                GetScalarNodeValue(nodePair.Value)));
 }