github.com/jamescostian/go-swagger@v0.30.4-0.20221130163922-68364d6b567b/generator/templates/client/response.gotmpl (about)

     1  {{- define "clientresponse" }}
     2  // New{{ pascalize .Name }} creates a {{ pascalize .Name }} with default headers values
     3  func New{{ pascalize .Name }}({{ if eq .Code -1 }}code int{{ end }}{{ if .Schema }}{{ if and (eq .Code -1) .Schema.IsStream }}, {{end}}{{ if .Schema.IsStream }}writer io.Writer{{ end }}{{ end }}) *{{ pascalize .Name }} {
     4    {{- if .Headers.HasSomeDefaults }}
     5    var (
     6    // initialize headers with default values
     7      {{- range .Headers }}
     8        {{- if .HasDefault }}
     9          {{ template "simpleschemaDefaultsvar" . }}
    10         {{- end }}
    11      {{- end }}
    12    )
    13      {{- range .Headers }}
    14        {{- if .HasDefault }}
    15          {{ template "simpleschemaDefaultsinit" . }}
    16        {{- end }}
    17      {{- end }}
    18    {{- end }}
    19    return &{{ pascalize .Name }}{
    20      {{- if eq .Code -1 }}
    21      _statusCode: code,
    22      {{- end }}
    23      {{ range .Headers }}
    24        {{- if .HasDefault }}
    25      {{ pascalize .Name}}: {{ if and (not .IsArray) (not .HasDiscriminator) (not .IsInterface) (not .IsStream) .IsNullable }}&{{ end }}{{ varname .ID }}Default,
    26        {{- end }}
    27      {{- end }}
    28      {{- if .Schema }}
    29        {{- if .Schema.IsStream }}
    30      Payload: writer,
    31        {{- end }}
    32      {{- end }}
    33      }
    34  }
    35  
    36  /* {{ pascalize .Name}} describes a response with status code {{ .Code }}, with default header values.
    37  
    38   {{ if .Description }}{{ blockcomment .Description }}{{else}}{{ pascalize .Name }} {{ humanize .Name }}{{end}}
    39   */
    40  type {{ pascalize .Name }} struct {
    41    {{- if eq .Code -1 }}
    42    _statusCode int
    43    {{- end }}
    44    {{- range .Headers }}
    45      {{- if .Description }}
    46  
    47    /* {{ blockcomment .Description }}
    48       {{- if or .SwaggerFormat .Default }}
    49         {{ print "" }}
    50         {{- if .SwaggerFormat }}
    51       Format: {{ .SwaggerFormat }}
    52         {{- end }}
    53         {{- if .Default }}
    54       Default: {{ json .Default }}
    55         {{- end }}
    56       {{- end }}
    57    */
    58      {{- end }}
    59    {{ pascalize .Name }} {{ .GoType }}
    60    {{- end }}
    61    {{- if .Schema }}
    62  
    63    Payload {{ if and (not .Schema.IsBaseType) (not .Schema.IsInterface) .Schema.IsComplexObject (not .Schema.IsStream) }}*{{ end }}{{ if (not .Schema.IsStream) }}{{ .Schema.GoType }}{{ else }}io.Writer{{end}}
    64    {{- end }}
    65  }
    66    {{- if eq .Code -1 }}
    67  
    68  // Code gets the status code for the {{ humanize .Name }} response
    69  func ({{ .ReceiverName }} *{{ pascalize .Name }}) Code() int {
    70    return {{ .ReceiverName }}._statusCode
    71  }
    72    {{- end }}
    73  
    74  // IsSuccess returns true when this {{ humanize .Name }} response has a 2xx status code
    75  func ({{ .ReceiverName }} *{{ pascalize .Name }}) IsSuccess() bool {
    76    {{- if eq .Code -1 }}
    77    return {{ .ReceiverName }}._statusCode/100 == 2
    78    {{- else }}
    79    return {{ and (ge .Code 200) (lt .Code 300) }}
    80    {{- end }}
    81  }
    82  
    83  // IsRedirect returns true when this {{ humanize .Name }} response has a 3xx status code
    84  func ({{ .ReceiverName }} *{{ pascalize .Name }}) IsRedirect() bool {
    85    {{- if eq .Code -1 }}
    86    return {{ .ReceiverName }}._statusCode/100 == 3
    87    {{- else }}
    88    return {{ and (ge .Code 300) (lt .Code 400) }}
    89    {{- end }}
    90  }
    91  
    92  // IsClientError returns true when this {{ humanize .Name }} response has a 4xx status code
    93  func ({{ .ReceiverName }} *{{ pascalize .Name }}) IsClientError() bool {
    94    {{- if eq .Code -1 }}
    95    return {{ .ReceiverName }}._statusCode/100 == 4
    96    {{- else }}
    97    return {{ and (ge .Code 400) (lt .Code 500) }}
    98    {{- end }}
    99  }
   100  
   101  // IsServerError returns true when this {{ humanize .Name }} response has a 5xx status code
   102  func ({{ .ReceiverName }} *{{ pascalize .Name }}) IsServerError() bool {
   103    {{- if eq .Code -1 }}
   104    return {{ .ReceiverName }}._statusCode/100 == 5
   105    {{- else }}
   106    return {{ and (ge .Code 500) (lt .Code 600) }}
   107    {{- end }}
   108  }
   109  
   110  // IsCode returns true when this {{ humanize .Name }} response a status code equal to that given
   111  func ({{ .ReceiverName }} *{{ pascalize .Name }}) IsCode(code int) bool {
   112    {{- if eq .Code -1 }}
   113    return {{ .ReceiverName }}._statusCode == code
   114    {{- else }}
   115    return code == {{ .Code }}
   116    {{- end }}
   117  }
   118  
   119  func ({{ .ReceiverName }} *{{ pascalize .Name }}) Error() string {
   120  	return fmt.Sprintf("[{{ upper .Method }} {{ .Path }}][%d] {{ if .Name }}{{ .Name }} {{ else }}unknown error {{ end }}{{ if .Schema }} %+v{{ end }}", {{ if eq .Code -1 }}{{ .ReceiverName }}._statusCode{{ else }}{{ .Code }}{{ end }}{{ if .Schema }}, o.Payload{{ end }})
   121  }
   122  
   123  func ({{ .ReceiverName }} *{{ pascalize .Name }}) String() string {
   124  	return fmt.Sprintf("[{{ upper .Method }} {{ .Path }}][%d] {{ if .Name }}{{ .Name }} {{ else }}unknown response {{ end }}{{ if .Schema }} %+v{{ end }}", {{ if eq .Code -1 }}{{ .ReceiverName }}._statusCode{{ else }}{{ .Code }}{{ end }}{{ if .Schema }}, o.Payload{{ end }})
   125  }
   126  
   127  {{ if .Schema }}
   128  func ({{ .ReceiverName }} *{{ pascalize .Name }}) GetPayload() {{ if and (not .Schema.IsBaseType) (not .Schema.IsInterface) .Schema.IsComplexObject (not .Schema.IsStream) }}*{{ end }}{{ if (not .Schema.IsStream) }}{{ .Schema.GoType }}{{ else }}io.Writer{{end}} {
   129  	return o.Payload
   130  }
   131  {{- end }}
   132  
   133  func ({{ .ReceiverName }} *{{ pascalize .Name }}) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {
   134    {{- range .Headers }}
   135  
   136    // hydrates response header {{.Name}}
   137    hdr{{ pascalize .Name }} := response.GetHeader("{{ .Name }}")
   138  
   139    if hdr{{ pascalize .Name }} != "" {
   140      {{- if .Converter }}
   141    val{{ camelize .Name }}, err := {{ .Converter }}(hdr{{ pascalize .Name }})
   142    if err != nil {
   143      return errors.InvalidType({{ .Path }}, "header", "{{ .GoType }}", hdr{{ pascalize .Name }})
   144    }
   145    {{ .ReceiverName }}.{{ pascalize .Name }} = val{{ camelize .Name }}
   146      {{- else if .Child }}
   147  
   148    // binding header items for {{ .Name }}
   149    val{{ pascalize .Name }}, err := {{ .ReceiverName }}.bindHeader{{ pascalize .Name }}(hdr{{ pascalize .Name }}, formats)
   150    if err != nil {
   151      return err
   152    }
   153  
   154    {{ .ReceiverName }}.{{ pascalize .Name }} = val{{ pascalize .Name }}
   155      {{- else if .IsCustomFormatter }}
   156    val{{ camelize .Name }}, err := formats.Parse({{ printf "%q" .SwaggerFormat }}, hdr{{ pascalize .Name }})
   157    if err != nil {
   158      return errors.InvalidType({{ .Path }}, "header", "{{ .GoType }}", hdr{{ pascalize .Name }})
   159    }
   160        {{- if .IsNullable }}
   161    v := (val{{ camelize .Name }}.({{ .GoType }}))
   162    {{ .ReceiverName }}.{{ pascalize .Name }} = &v
   163        {{- else }}
   164    {{ .ReceiverName }}.{{ pascalize .Name }} = *(val{{ camelize .Name }}.(*{{ .GoType }}))
   165        {{- end }}
   166      {{- else }}
   167        {{- if eq .GoType "string" }}
   168    {{ .ReceiverName }}.{{ pascalize .Name }} = hdr{{ pascalize .Name }}
   169        {{- else }}
   170    {{ .ReceiverName }}.{{ pascalize .Name }} = {{ .GoType }}(hdr{{ pascalize .Name }})
   171        {{- end }}
   172      {{- end }}
   173    }
   174    {{-  end }}
   175  
   176    {{- if .Schema }}
   177      {{- if .Schema.IsBaseType }}
   178  
   179    // response payload as interface type
   180    payload, err := {{ toPackageName .ModelsPackage }}.Unmarshal{{ dropPackage .Schema.GoType }}{{ if .Schema.IsArray}}Slice{{ end }}(response.Body(), consumer)
   181    if err != nil {
   182      return err
   183    }
   184    {{ .ReceiverName }}.Payload = payload
   185      {{- else if .Schema.IsComplexObject }}
   186  
   187    {{ .ReceiverName }}.Payload = new({{ .Schema.GoType }})
   188      {{- end }}
   189      {{- if not .Schema.IsBaseType }}
   190  
   191    // response payload
   192    if err := consumer.Consume(response.Body(), {{ if not (or .Schema.IsComplexObject .Schema.IsStream) }}&{{ end}}{{ .ReceiverName }}.Payload); err != nil && err != io.EOF {
   193      return err
   194    }
   195      {{- end }}
   196    {{- end }}
   197  
   198    return nil
   199  }
   200    {{- range .Headers }}
   201      {{- if .Child }}
   202  
   203  // bindHeader{{ pascalize $.Name }} binds the response header {{ .Name }}
   204  func ({{ .ReceiverName }} *{{ pascalize $.Name }}) bindHeader{{ pascalize .Name }}(hdr string, formats strfmt.Registry) ({{ .GoType }}, error) {
   205    {{ varname .Child.ValueExpression }}V := hdr
   206  
   207    {{ template "sliceclientheaderbinder" . }}
   208  
   209    return {{ varname .Child.ValueExpression }}C, nil
   210  }
   211      {{- end }}
   212    {{- end }}
   213  {{- end }}
   214  // Code generated by go-swagger; DO NOT EDIT.
   215  
   216  
   217  {{ if .Copyright -}}// {{ comment .Copyright -}}{{ end }}
   218  
   219  
   220  package {{ .Package }}
   221  
   222  // This file was generated by the swagger tool.
   223  // Editing this file might prove futile when you re-run the swagger generate command
   224  
   225  
   226  import (
   227    "io"
   228    "net/http"
   229  
   230    "github.com/go-openapi/errors"
   231    "github.com/go-openapi/runtime"
   232    "github.com/go-openapi/strfmt"
   233    "github.com/go-openapi/swag"
   234    "github.com/go-openapi/validate"
   235  
   236    {{ imports .DefaultImports }}
   237    {{ imports .Imports }}
   238  )
   239  
   240  // {{ pascalize .Name }}Reader is a Reader for the {{ pascalize .Name }} structure.
   241  type {{ pascalize .Name }}Reader struct {
   242    formats strfmt.Registry
   243  {{- if .HasStreamingResponse }}
   244    writer  io.Writer
   245  {{- end }}
   246  }
   247  
   248  // ReadResponse reads a server response into the received {{ .ReceiverName }}.
   249  func ({{ .ReceiverName }} *{{ pascalize .Name }}Reader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) {
   250    {{- if .Responses}}
   251    switch response.Code() {
   252    {{- end }}
   253    {{- range .Responses }}
   254      case {{ .Code }}:
   255        result := New{{ pascalize .Name }}({{ if .Schema }}{{ if .Schema.IsStream }}{{ $.ReceiverName }}.writer{{ end }}{{ end }})
   256        if err := result.readResponse(response, consumer, {{ $.ReceiverName }}.formats); err != nil {
   257          return nil, err
   258        }
   259        return {{ if .IsSuccess }}result, nil{{else}}nil, result{{ end }}
   260    {{- end }}
   261    {{- if .DefaultResponse }}
   262      {{- with .DefaultResponse }}
   263        {{- if $.Responses}}
   264      default:
   265        {{- end }}
   266        result := New{{ pascalize .Name }}(response.Code(){{ if .Schema }}{{ if .Schema.IsStream }}, {{ $.ReceiverName }}.writer{{ end }}{{ end }})
   267        if err := result.readResponse(response, consumer, {{ $.ReceiverName }}.formats); err != nil {
   268          return nil, err
   269        }
   270        if response.Code() / 100 == 2 {
   271          return result, nil
   272        }
   273        return nil, result
   274      {{- end }}
   275    {{- else }}
   276      {{- if $.Responses}}
   277      default:
   278      {{- end }}
   279        return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code())
   280    {{- end }}
   281    {{- if .Responses}}
   282    }
   283    {{- end }}
   284  }
   285  
   286  {{ range .Responses }}
   287    {{ template "clientresponse" . }}
   288  {{ end }}
   289  {{ if .DefaultResponse }}
   290    {{ template "clientresponse" .DefaultResponse }}
   291  {{ end }}
   292  
   293  {{ range .ExtraSchemas }}
   294  /*{{ pascalize .Name }} {{ template "docstring" . }}
   295  swagger:model {{ .Name }}
   296  */
   297    {{- template "schema" . }}
   298  {{- end }}
   299  
   300  {{- define "sliceclientheaderbinder" }}
   301   {{- if .IsArray }}
   302   var (
   303     {{ varname .Child.ValueExpression }}C {{ .GoType }}
   304   )
   305   // {{ .Child.ItemsDepth }}CollectionFormat: {{ printf "%q" .CollectionFormat }}
   306   {{ varname .Child.ValueExpression }}R := swag.SplitByFormat({{ varname .Child.ValueExpression }}V, {{ printf "%q" .CollectionFormat }})
   307  
   308   for {{ if or .Child.IsCustomFormatter .Child.Converter }}{{ .IndexVar }}{{ else }}_{{ end }}, {{ varname .Child.ValueExpression }}IV := range {{ varname .Child.ValueExpression }}R {
   309     {{ template "sliceclientheaderbinder" .Child }}
   310     {{ varname .Child.ValueExpression }}C = append({{ varname .Child.ValueExpression }}C, {{ varname .Child.ValueExpression }}IC) // roll-up {{ .Child.GoType }} into {{ .GoType }}
   311   }
   312  
   313   {{- else }}
   314     // convert split string to {{ .GoType }}
   315     {{- if .IsCustomFormatter }}
   316   val, err := formats.Parse({{ printf "%q" .SwaggerFormat }}, {{ varname .ValueExpression }}IV)
   317   if err != nil {
   318     return nil, errors.InvalidType({{ .Path }}, "header{{ .ItemsDepth }}", "{{ .GoType }}", {{ varname .ValueExpression }}IV)
   319   }
   320       {{- if .IsNullable }}
   321   {{ varname .ValueExpression }}IC := (&val).(*{{ .GoType }})
   322       {{- else }}
   323   {{ varname .ValueExpression }}IC := val.({{ .GoType }})
   324       {{- end }}
   325     {{- else if .Converter }}
   326   val, err := {{- print " "}}{{ .Converter }}({{ varname .ValueExpression }}IV)
   327   if err != nil {
   328     return nil, errors.InvalidType({{ .Path }}, "header{{ .ItemsDepth }}", "{{ .GoType }}", {{ varname .ValueExpression }}IV)
   329   }
   330       {{- if .IsNullable }}
   331   {{ varname .ValueExpression }}IC := &val
   332       {{- else }}
   333   {{ varname .ValueExpression }}IC := val
   334       {{- end }}
   335     {{- else }}
   336     {{ varname .ValueExpression }}IC :=
   337       {{- if eq .GoType "string" }}
   338         {{- print " " }}{{ varname .ValueExpression }}IV
   339       {{- else }}
   340         {{- print " " }}fmt.Sprintf("%v", {{ varname .ValueExpression }}IV)
   341       {{- end }} // string as {{ .GoType }}
   342     {{- end }}
   343   {{- end }}
   344  {{- end }}