github.com/thetreep/go-swagger@v0.0.0-20240223100711-35af64f14f01/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 }}