github.com/shippio/gqlgen@v0.0.0-20220912092219-633ea699ef07/codegen/input.gotpl (about) 1 {{- range $input := .Inputs }} 2 {{- if not .HasUnmarshal }} 3 func (ec *executionContext) unmarshalInput{{ .Name }}(ctx context.Context, obj interface{}) ({{.Type | ref}}, error) { 4 var it {{.Type | ref}} 5 asMap := map[string]interface{}{} 6 for k, v := range obj.(map[string]interface{}) { 7 asMap[k] = v 8 } 9 {{ range $field := .Fields}} 10 {{- if notNil "Default" $field }} 11 if _, present := asMap[{{$field.Name|quote}}] ; !present { 12 asMap[{{$field.Name|quote}}] = {{ $field.Default | dump }} 13 } 14 {{- end}} 15 {{- end }} 16 17 fieldsInOrder := [...]string{ {{ range .Fields }}{{ quote .Name }},{{ end }} } 18 for _, k := range fieldsInOrder { 19 v, ok := asMap[k] 20 if !ok { 21 continue 22 } 23 switch k { 24 {{- range $field := .Fields }} 25 case {{$field.Name|quote}}: 26 var err error 27 28 ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField({{$field.Name|quote}})) 29 {{- if $field.ImplDirectives }} 30 directive0 := func(ctx context.Context) (interface{}, error) { return ec.{{ $field.TypeReference.UnmarshalFunc }}(ctx, v) } 31 {{ template "implDirectives" $field }} 32 tmp, err := directive{{$field.ImplDirectives|len}}(ctx) 33 if err != nil { 34 return it, graphql.ErrorOnPath(ctx, err) 35 } 36 if data, ok := tmp.({{ $field.TypeReference.GO | ref }}) ; ok { 37 {{- if $field.IsResolver }} 38 if err = ec.resolvers.{{ $field.ShortInvocation }}; err != nil { 39 return it, err 40 } 41 {{- else }} 42 it.{{$field.GoFieldName}} = data 43 {{- end }} 44 {{- if $field.TypeReference.IsNilable }} 45 {{- if not $field.IsResolver }} 46 } else if tmp == nil { 47 it.{{$field.GoFieldName}} = nil 48 {{- end }} 49 {{- end }} 50 } else { 51 err := fmt.Errorf(`unexpected type %T from directive, should be {{ $field.TypeReference.GO }}`, tmp) 52 return it, graphql.ErrorOnPath(ctx, err) 53 } 54 {{- else }} 55 {{- if $field.IsResolver }} 56 data, err := ec.{{ $field.TypeReference.UnmarshalFunc }}(ctx, v) 57 if err != nil { 58 return it, err 59 } 60 if err = ec.resolvers.{{ $field.ShortInvocation }}; err != nil { 61 return it, err 62 } 63 {{- else }} 64 it.{{$field.GoFieldName}}, err = ec.{{ $field.TypeReference.UnmarshalFunc }}(ctx, v) 65 if err != nil { 66 return it, err 67 } 68 {{- end }} 69 {{- end }} 70 {{- end }} 71 } 72 } 73 74 return it, nil 75 } 76 {{- end }} 77 {{ end }}