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 }}