...
1 package ast
2
3 func arg2map(defs ArgumentDefinitionList, args ArgumentList, vars map[string]interface{}) map[string]interface{} {
4 result := map[string]interface{}{}
5 var err error
6
7 for _, argDef := range defs {
8 var val interface{}
9 var hasValue bool
10
11 if argValue := args.ForName(argDef.Name); argValue != nil {
12 if argValue.Value.Kind == Variable {
13 val, hasValue = vars[argValue.Value.Raw]
14 } else {
15 val, err = argValue.Value.Value(vars)
16 if err != nil {
17 panic(err)
18 }
19 hasValue = true
20 }
21 }
22
23 if !hasValue && argDef.DefaultValue != nil {
24 val, err = argDef.DefaultValue.Value(vars)
25 if err != nil {
26 panic(err)
27 }
28 hasValue = true
29 }
30
31 if hasValue {
32 result[argDef.Name] = val
33 }
34 }
35
36 return result
37 }
38
View as plain text