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