github.com/niko0xdev/gqlgen@v0.17.55-0.20240120102243-2ecff98c3e37/codegen/input.gotpl (about) 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 }}