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