...

Text file src/github.com/99designs/gqlgen/codegen/input.gotpl

Documentation: github.com/99designs/gqlgen/codegen

     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