getFragment parses a fragment definition (not reference).
(it *lex.ItemIterator)
| 1075 | |
| 1076 | // getFragment parses a fragment definition (not reference). |
| 1077 | func getFragment(it *lex.ItemIterator) (*fragmentNode, error) { |
| 1078 | var name string |
| 1079 | loop: |
| 1080 | for it.Next() { |
| 1081 | item := it.Item() |
| 1082 | switch item.Typ { |
| 1083 | case itemName: |
| 1084 | v := strings.TrimSpace(item.Val) |
| 1085 | if len(v) > 0 && name == "" { |
| 1086 | // Currently, we take the first nontrivial token as the |
| 1087 | // fragment name and ignore everything after that until we see |
| 1088 | // a left curl. |
| 1089 | name = v |
| 1090 | } |
| 1091 | case itemLeftCurl: |
| 1092 | break loop |
| 1093 | default: |
| 1094 | return nil, item.Errorf("Unexpected item in fragment: %v %v", item.Typ, item.Val) |
| 1095 | } |
| 1096 | } |
| 1097 | if name == "" { |
| 1098 | return nil, it.Errorf("Empty fragment name") |
| 1099 | } |
| 1100 | |
| 1101 | gq := &GraphQuery{ |
| 1102 | Args: make(map[string]string), |
| 1103 | } |
| 1104 | if err := godeep(it, gq); err != nil { |
| 1105 | return nil, err |
| 1106 | } |
| 1107 | fn := &fragmentNode{ |
| 1108 | Name: name, |
| 1109 | Gq: gq, |
| 1110 | } |
| 1111 | return fn, nil |
| 1112 | } |
| 1113 | |
| 1114 | // parses till rightSquare is found (parses [a, b]) excluding leftSquare |
| 1115 | // This function can be reused for query later |
no test coverage detected