...
1{{- range $input := .Inputs }}
2 {{- if not .HasUnmarshal }}
3 {{- $it := "it" }}
4 {{- if .PointersInUmarshalInput }}
5 {{- $it = "&it" }}
6 {{- end }}
7 func (ec *executionContext) unmarshalInput{{ .Name }}(ctx context.Context, obj interface{}) ({{ if .PointersInUmarshalInput }}*{{ end }}{{.Type | ref}}, error) {
8 {{- if $input.IsMap }}
9 it := make(map[string]interface{}, len(obj.(map[string]interface{})))
10 {{- else }}
11 var it {{.Type | ref}}
12 {{- end }}
13 asMap := map[string]interface{}{}
14 for k, v := range obj.(map[string]interface{}) {
15 asMap[k] = v
16 }
17 {{ range $field := .Fields}}
18 {{- if notNil "Default" $field }}
19 if _, present := asMap[{{$field.Name|quote}}] ; !present {
20 asMap[{{$field.Name|quote}}] = {{ $field.Default | dump }}
21 }
22 {{- end}}
23 {{- end }}
24
25 fieldsInOrder := [...]string{ {{ range .Fields }}{{ quote .Name }},{{ end }} }
26 for _, k := range fieldsInOrder {
27 v, ok := asMap[k]
28 if !ok {
29 continue
30 }
31 switch k {
32 {{- range $field := .Fields }}
33 case {{$field.Name|quote}}:
34 {{- $lhs := (printf "it.%s" $field.GoFieldName) }}
35 {{- if $input.IsMap }}
36 {{- $lhs = (printf "it[%q]" $field.Name) }}
37 {{- end }}
38 ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField({{$field.Name|quote}}))
39 {{- if $field.ImplDirectives }}
40 directive0 := func(ctx context.Context) (interface{}, error) { return ec.{{ $field.TypeReference.UnmarshalFunc }}(ctx, v) }
41 {{ template "implDirectives" $field }}
42 tmp, err := directive{{$field.ImplDirectives|len}}(ctx)
43 if err != nil {
44 return {{$it}}, graphql.ErrorOnPath(ctx, err)
45 }
46 if data, ok := tmp.({{ $field.TypeReference.GO | ref }}) ; ok {
47 {{- if $field.IsResolver }}
48 if err = ec.resolvers.{{ $field.ShortInvocation }}; err != nil {
49 return {{$it}}, err
50 }
51 {{- else }}
52 {{- if $field.TypeReference.IsOmittable }}
53 {{ $lhs }} = graphql.OmittableOf(data)
54 {{- else }}
55 {{ $lhs }} = data
56 {{- end }}
57 {{- end }}
58 {{- if $field.TypeReference.IsNilable }}
59 {{- if not $field.IsResolver }}
60 } else if tmp == nil {
61 {{- if $field.TypeReference.IsOmittable }}
62 {{ $lhs }} = graphql.OmittableOf[{{ $field.TypeReference.GO | ref }}](nil)
63 {{- else }}
64 {{ $lhs }} = nil
65 {{- end }}
66 {{- end }}
67 {{- end }}
68 } else {
69 err := fmt.Errorf(`unexpected type %T from directive, should be {{ $field.TypeReference.GO }}`, tmp)
70 return {{$it}}, graphql.ErrorOnPath(ctx, err)
71 }
72 {{- else }}
73 {{- if $field.IsResolver }}
74 data, err := ec.{{ $field.TypeReference.UnmarshalFunc }}(ctx, v)
75 if err != nil {
76 return {{$it}}, err
77 }
78 if err = ec.resolvers.{{ $field.ShortInvocation }}; err != nil {
79 return {{$it}}, err
80 }
81 {{- else }}
82 data, err := ec.{{ $field.TypeReference.UnmarshalFunc }}(ctx, v)
83 if err != nil {
84 return {{$it}}, err
85 }
86 {{- if $field.TypeReference.IsOmittable }}
87 {{ $lhs }} = graphql.OmittableOf(data)
88 {{- else }}
89 {{ $lhs }} = data
90 {{- end }}
91 {{- end }}
92 {{- end }}
93 {{- end }}
94 }
95 }
96
97 return {{$it}}, nil
98 }
99 {{- end }}
100{{ end }}
View as plain text