mirror of
https://github.com/pomerium/pomerium.git
synced 2025-05-02 03:46:29 +02:00
207 lines
7.1 KiB
Cheetah
207 lines
7.1 KiB
Cheetah
{{/*
|
|
This file contains the original client-with-responses.tmpl, plus some additional
|
|
code to generate custom response functions.
|
|
*/}}
|
|
|
|
{{/* Begin upstream code /*}}
|
|
|
|
{{/*
|
|
// Copyright 2019 DeepMap, Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
*/}}
|
|
|
|
// ClientWithResponses builds on ClientInterface to offer response payloads
|
|
type ClientWithResponses struct {
|
|
ClientInterface
|
|
}
|
|
|
|
// NewClientWithResponses creates a new ClientWithResponses, which wraps
|
|
// Client with return type handling
|
|
func NewClientWithResponses(server string, opts ...ClientOption) (*ClientWithResponses, error) {
|
|
client, err := NewClient(server, opts...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &ClientWithResponses{client}, nil
|
|
}
|
|
|
|
{{$clientTypeName := opts.OutputOptions.ClientTypeName -}}
|
|
|
|
// WithBaseURL overrides the baseURL.
|
|
func WithBaseURL(baseURL string) ClientOption {
|
|
return func(c *{{ $clientTypeName }}) error {
|
|
newBaseURL, err := url.Parse(baseURL)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
c.Server = newBaseURL.String()
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// ClientWithResponsesInterface is the interface specification for the client with responses above.
|
|
type ClientWithResponsesInterface interface {
|
|
{{range . -}}
|
|
{{$hasParams := .RequiresParamObject -}}
|
|
{{$pathParams := .PathParams -}}
|
|
{{$opid := .OperationId -}}
|
|
// {{$opid}}{{if .HasBody}}WithBody{{end}}WithResponse request{{if .HasBody}} with any body{{end}}
|
|
{{$opid}}{{if .HasBody}}WithBody{{end}}WithResponse(ctx context.Context{{genParamArgs .PathParams}}{{if .RequiresParamObject}}, params *{{$opid}}Params{{end}}{{if .HasBody}}, contentType string, body io.Reader{{end}}, reqEditors... RequestEditorFn) (*{{genResponseTypeName $opid}}, error)
|
|
{{range .Bodies}}
|
|
{{if .IsSupportedByClient -}}
|
|
{{$opid}}{{.Suffix}}WithResponse(ctx context.Context{{genParamArgs $pathParams}}{{if $hasParams}}, params *{{$opid}}Params{{end}}, body {{$opid}}{{.NameTag}}RequestBody, reqEditors... RequestEditorFn) (*{{genResponseTypeName $opid}}, error)
|
|
{{end -}}
|
|
{{end}}{{/* range .Bodies */}}
|
|
{{end}}{{/* range . $opid := .OperationId */}}
|
|
}
|
|
|
|
{{range .}}{{$opid := .OperationId}}{{$op := .}}
|
|
type {{genResponseTypeName $opid | ucFirst}} struct {
|
|
Body []byte
|
|
HTTPResponse *http.Response
|
|
{{- range getResponseTypeDefinitions .}}
|
|
{{.TypeName}} *{{.Schema.TypeDecl}}
|
|
{{- end}}
|
|
}
|
|
|
|
// Status returns HTTPResponse.Status
|
|
func (r {{genResponseTypeName $opid | ucFirst}}) Status() string {
|
|
if r.HTTPResponse != nil {
|
|
return r.HTTPResponse.Status
|
|
}
|
|
return http.StatusText(0)
|
|
}
|
|
|
|
// StatusCode returns HTTPResponse.StatusCode
|
|
func (r {{genResponseTypeName $opid | ucFirst}}) StatusCode() int {
|
|
if r.HTTPResponse != nil {
|
|
return r.HTTPResponse.StatusCode
|
|
}
|
|
return 0
|
|
}
|
|
{{end}}
|
|
|
|
|
|
{{range .}}
|
|
{{$opid := .OperationId -}}
|
|
{{/* Generate client methods (with responses)*/}}
|
|
|
|
// {{$opid}}{{if .HasBody}}WithBody{{end}}WithResponse request{{if .HasBody}} with arbitrary body{{end}} returning *{{genResponseTypeName $opid}}
|
|
func (c *ClientWithResponses) {{$opid}}{{if .HasBody}}WithBody{{end}}WithResponse(ctx context.Context{{genParamArgs .PathParams}}{{if .RequiresParamObject}}, params *{{$opid}}Params{{end}}{{if .HasBody}}, contentType string, body io.Reader{{end}}, reqEditors... RequestEditorFn) (*{{genResponseTypeName $opid}}, error){
|
|
rsp, err := c.{{$opid}}{{if .HasBody}}WithBody{{end}}(ctx{{genParamNames .PathParams}}{{if .RequiresParamObject}}, params{{end}}{{if .HasBody}}, contentType, body{{end}}, reqEditors...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return Parse{{genResponseTypeName $opid | ucFirst}}(rsp)
|
|
}
|
|
|
|
{{$hasParams := .RequiresParamObject -}}
|
|
{{$pathParams := .PathParams -}}
|
|
{{$bodyRequired := .BodyRequired -}}
|
|
{{range .Bodies}}
|
|
{{if .IsSupportedByClient -}}
|
|
func (c *ClientWithResponses) {{$opid}}{{.Suffix}}WithResponse(ctx context.Context{{genParamArgs $pathParams}}{{if $hasParams}}, params *{{$opid}}Params{{end}}, body {{$opid}}{{.NameTag}}RequestBody, reqEditors... RequestEditorFn) (*{{genResponseTypeName $opid}}, error) {
|
|
rsp, err := c.{{$opid}}{{.Suffix}}(ctx{{genParamNames $pathParams}}{{if $hasParams}}, params{{end}}, body, reqEditors...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return Parse{{genResponseTypeName $opid | ucFirst}}(rsp)
|
|
}
|
|
{{end}}
|
|
{{end}}
|
|
|
|
{{end}}{{/* operations */}}
|
|
|
|
{{/* Generate parse functions for responses*/}}
|
|
{{range .}}{{$opid := .OperationId}}
|
|
|
|
// Parse{{genResponseTypeName $opid | ucFirst}} parses an HTTP response from a {{$opid}}WithResponse call
|
|
func Parse{{genResponseTypeName $opid | ucFirst}}(rsp *http.Response) (*{{genResponseTypeName $opid}}, error) {
|
|
bodyBytes, err := io.ReadAll(rsp.Body)
|
|
defer func() { _ = rsp.Body.Close() }()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
response := {{genResponsePayload $opid}}
|
|
|
|
{{genResponseUnmarshal .}}
|
|
|
|
return response, nil
|
|
}
|
|
{{end}}{{/* range . $opid := .OperationId */}}
|
|
|
|
{{/* End upstream code /*}}
|
|
|
|
|
|
{{/* Custom code below */}}
|
|
|
|
{{range .}}{{$opid := .OperationId}}{{$op := .}}
|
|
// GetHTTPResponse implements apierror.APIResponse
|
|
func (r *{{genResponseTypeName $opid | ucFirst}}) GetHTTPResponse() *http.Response {
|
|
return r.HTTPResponse
|
|
}
|
|
{{- $has200Resp := false -}}
|
|
{{- range getResponseTypeDefinitions .}}
|
|
{{- if (eq .TypeName "JSON200")}}
|
|
{{- $has200Resp = true}}
|
|
// GetValue implements apierror.APIResponse
|
|
func (r *{{genResponseTypeName $opid | ucFirst}}) GetValue() *{{.Schema.TypeDecl}} {
|
|
return r.JSON200
|
|
}
|
|
{{- else if (eq .TypeName "JSON400")}}
|
|
// GetBadRequestError implements apierror.APIResponse
|
|
func (r *{{genResponseTypeName $opid | ucFirst}}) GetBadRequestError() (string, bool) {
|
|
if r.JSON400 == nil {
|
|
return "", false
|
|
}
|
|
return r.JSON400.Error, true
|
|
}
|
|
{{- else if (eq .TypeName "JSON404")}}
|
|
|
|
func (r *{{genResponseTypeName $opid | ucFirst}}) GetNotFoundError() (string, bool) {
|
|
if r.JSON404 == nil {
|
|
return "", false
|
|
}
|
|
return r.JSON404.Error, true
|
|
}
|
|
{{- else if (eq .TypeName "JSON403")}}
|
|
|
|
func (r *{{genResponseTypeName $opid | ucFirst}}) GetForbiddenError() (string, bool) {
|
|
if r.JSON403 == nil {
|
|
return "", false
|
|
}
|
|
return r.JSON403.Error, true
|
|
}
|
|
{{- else if (eq .TypeName "JSON500")}}
|
|
// GetInternalServerError implements apierror.APIResponse
|
|
func (r *{{genResponseTypeName $opid | ucFirst}}) GetInternalServerError() (string, bool) {
|
|
if r.JSON500 == nil {
|
|
return "", false
|
|
}
|
|
return r.JSON500.Error, true
|
|
}
|
|
|
|
{{- end}}
|
|
{{- end}}
|
|
{{- if (not $has200Resp)}}
|
|
// GetValue implements apierror.APIResponse
|
|
func (r *{{genResponseTypeName $opid | ucFirst}}) GetValue() *EmptyResponse {
|
|
if r.StatusCode()/100 != 2 {
|
|
return nil
|
|
}
|
|
return &EmptyResponse{}
|
|
}
|
|
{{- end}}
|
|
{{end}}
|