@@ -26,33 +26,19 @@ func sortByOperator(d *dataTreeNavigator, context Context, expressionNode *Expre
26
26
27
27
var sortableArray sortableNodeArray
28
28
29
- if candidate .Kind == MappingNode {
30
-
31
- sortableArray = make (sortableNodeArray , len (candidate .Content )/ 2 )
32
- for i := 1 ; i < len (candidate .Content ); i = i + 2 {
33
-
34
- originalNode := candidate .Content [i ]
35
- compareContext , err := d .GetMatchingNodes (context .SingleReadonlyChildContext (originalNode ), expressionNode .RHS )
29
+ if candidate .CanVisitValues () {
30
+ sortableArray = make (sortableNodeArray , 0 )
31
+ visitor := func (valueNode * CandidateNode ) error {
32
+ compareContext , err := d .GetMatchingNodes (context .SingleReadonlyChildContext (valueNode ), expressionNode .RHS )
36
33
if err != nil {
37
- return Context {}, err
34
+ return err
38
35
}
39
-
40
- sortableArray [ i / 2 ] = sortableNode { Node : originalNode , CompareContext : compareContext , dateTimeLayout : context . GetDateTimeLayout ()}
41
-
36
+ sortableNode := sortableNode { Node : valueNode , CompareContext : compareContext , dateTimeLayout : context . GetDateTimeLayout ()}
37
+ sortableArray = append ( sortableArray , sortableNode )
38
+ return nil
42
39
}
43
-
44
- } else if candidate .Kind == SequenceNode {
45
- sortableArray = make (sortableNodeArray , len (candidate .Content ))
46
-
47
- for i , originalNode := range candidate .Content {
48
-
49
- compareContext , err := d .GetMatchingNodes (context .SingleReadonlyChildContext (originalNode ), expressionNode .RHS )
50
- if err != nil {
51
- return Context {}, err
52
- }
53
-
54
- sortableArray [i ] = sortableNode {Node : originalNode , CompareContext : compareContext , dateTimeLayout : context .GetDateTimeLayout ()}
55
-
40
+ if err := candidate .VisitValues (visitor ); err != nil {
41
+ return context , err
56
42
}
57
43
} else {
58
44
return context , fmt .Errorf ("node at path [%v] is not an array or map (it's a %v)" , candidate .GetNicePath (), candidate .Tag )
0 commit comments