mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-29 13:45:20 +01:00
c58ccdfb8c
Signed-off-by: He Weiwei <hweiwei@vmware.com>
272 lines
12 KiB
Go Template
272 lines
12 KiB
Go Template
{{ define "serverheaderbuilder" }}
|
|
{{ if not .IsArray }}{{ template "simpleserverheaderbuilder" . }}{{ else }}{{ template "sliceserverheaderbuilder" . }}{{ end }}
|
|
{{- end }}
|
|
{{ define "simpleserverheaderbuilder" }}
|
|
{{ if .IsNullable -}}
|
|
var {{ varname .ID }} string
|
|
if {{ .ReceiverName }}.{{ pascalize .ID }} != nil {
|
|
{{ varname .ID }} = {{ if .Formatter }}{{ .Formatter }}(*{{ .ReceiverName }}.{{ pascalize .ID }}){{ else }}{{ if not .IsCustomFormatter }}*{{ end }}{{ .ReceiverName }}.{{ pascalize .ID }}{{ if .IsCustomFormatter }}.String(){{end}}{{end}}
|
|
}
|
|
{{ else }}{{ varname .ID }} := {{ if .Formatter }}{{ .Formatter }}({{ .ReceiverName }}.{{ pascalize .ID }}){{ else }}{{ .ReceiverName }}.{{ pascalize .ID }}{{ if .IsCustomFormatter }}.String(){{end}}{{end}}
|
|
{{ end -}}
|
|
if {{ varname .ID }} != "" {
|
|
rw.Header().Set({{ printf "%q" .Name }}, {{ varname .ID }})
|
|
}
|
|
{{ end }}
|
|
{{ define "sliceitemserverheaderbuilder" }}
|
|
{{ if .IsNullable -}}
|
|
var {{ .ValueExpression }}S string
|
|
if {{ .ValueExpression }} != nil {
|
|
{{ .ValueExpression }}S = {{ if .Formatter }}{{ .Formatter }}(*{{ .ValueExpression }}){{ else }}*{{ .ValueExpression }}{{ if .IsCustomFormatter }}.String(){{end}}{{end}}
|
|
}
|
|
{{ else -}}
|
|
{{ .ValueExpression }}S := {{ if .Formatter }}{{ .Formatter }}({{ .ValueExpression }}){{ else }}{{ .ValueExpression }}{{ if .IsCustomFormatter }}.String(){{end}}{{end}}
|
|
{{ end -}}
|
|
if {{ .ValueExpression }}S != "" {
|
|
{{ .ValueExpression }}R = append({{ .ValueExpression }}R, {{ .ValueExpression }}S)
|
|
}
|
|
{{ end }}
|
|
{{define "sliceserverheaderbuilder" }}
|
|
var {{ varname .Child.ValueExpression }}R []string
|
|
for _, {{ varname .Child.ValueExpression }} := range {{ .ValueExpression }} {
|
|
{{- if not .Child.IsArray }}{{ template "sliceitemserverheaderbuilder" .Child }}{{ else }}{{ template "sliceserverheaderbuilder" .Child }}{{ end -}}
|
|
}
|
|
{{ if not .Child.Parent -}}
|
|
{{ varname .ID }} := swag.JoinByFormat({{ varname .Child.ValueExpression }}R, {{ printf "%q" .CollectionFormat }})
|
|
if len({{ varname .ID }}) > 0 {
|
|
hv := {{ varname .ID }}[0]
|
|
if hv != "" {
|
|
rw.Header().Set({{ printf "%q" .Name }}, hv)
|
|
}
|
|
}
|
|
{{ else -}}
|
|
{{ .ValueExpression }}S := swag.JoinByFormat({{ varname .Child.ValueExpression }}R, {{ printf "%q" .CollectionFormat }})
|
|
if len({{ .ValueExpression }}S) > 0 {
|
|
{{ .ValueExpression }}Ss := {{ .ValueExpression }}S[0]
|
|
if {{ .ValueExpression }}Ss != "" {
|
|
{{ .ValueExpression }}R = append({{ .ValueExpression }}R, {{ .ValueExpression }}Ss)
|
|
}
|
|
}
|
|
{{ end -}}
|
|
{{ end -}}
|
|
{{ define "serverresponse" }}
|
|
{{ if ne .Code -1 }}// {{pascalize .Name}}Code is the HTTP code returned for type {{ pascalize .Name}}
|
|
const {{ pascalize .Name}}Code int = {{ .Code }}{{ end }}
|
|
|
|
/*{{ if .Description }}{{ pascalize .Name }} {{ blockcomment .Description }}{{else}}{{ pascalize .Name }} {{ humanize .Name }}{{end}}
|
|
|
|
swagger:response {{ camelize .Name }}
|
|
*/
|
|
type {{ pascalize .Name }} struct {
|
|
{{ if eq .Code -1 }}
|
|
_statusCode int
|
|
{{ end }}{{ range .Headers }}/*{{if .Description }}{{ blockcomment .Description }}{{ end }}
|
|
{{ if .Maximum }}
|
|
Maximum: {{ if .ExclusiveMaximum }}< {{ end }}{{ .Maximum }}{{ end }}{{ if .Minimum }}
|
|
Minimum: {{ if .ExclusiveMinimum }}> {{ end }}{{ .Minimum }}{{ end }}{{ if .MultipleOf }}
|
|
Multiple Of: {{ .MultipleOf }}{{ end }}{{ if .MaxLength }}
|
|
Max Length: {{ .MaxLength }}{{ end }}{{ if .MinLength }}
|
|
Min Length: {{ .MinLength }}{{ end }}{{ if .Pattern }}
|
|
Pattern: {{ .Pattern }}{{ end }}{{ if .MaxItems }}
|
|
Max Items: {{ .MaxItems }}{{ end }}{{ if .MinItems }}
|
|
Min Items: {{ .MinItems }}{{ end }}{{ if .UniqueItems }}
|
|
Unique: true{{ end }}{{ if .HasDefault }}
|
|
Default: {{ printf "%#v" .Default }}{{ end }}
|
|
*/
|
|
{{ pascalize .Name }} {{ .GoType }} `json:"{{.Name}}{{ if not .Required }},omitempty{{ end }}{{ if .IsJSONString }},string{{ end }}"`
|
|
{{ end }}
|
|
{{ if .Schema }}{{ with .Schema }}
|
|
/*{{if .Description }}{{ blockcomment .Description }}{{ end }}{{ if .Maximum }}
|
|
Maximum: {{ if .ExclusiveMaximum }}< {{ end }}{{ .Maximum }}{{ end }}{{ if .Minimum }}
|
|
Minimum: {{ if .ExclusiveMinimum }}> {{ end }}{{ .Minimum }}{{ end }}{{ if .MultipleOf }}
|
|
Multiple Of: {{ .MultipleOf }}{{ end }}{{ if .MaxLength }}
|
|
Max Length: {{ .MaxLength }}{{ end }}{{ if .MinLength }}
|
|
Min Length: {{ .MinLength }}{{ end }}{{ if .Pattern }}
|
|
Pattern: {{ .Pattern }}{{ end }}{{ if .MaxItems }}
|
|
Max Items: {{ .MaxItems }}{{ end }}{{ if .MinItems }}
|
|
Min Items: {{ .MinItems }}{{ end }}{{ if .UniqueItems }}
|
|
Unique: true{{ end }}
|
|
In: Body
|
|
*/{{ end }}
|
|
Payload {{ if and (not .Schema.IsBaseType) .Schema.IsComplexObject }}*{{ end }}{{ .Schema.GoType }} `json:"body,omitempty"`
|
|
{{ end }}
|
|
}
|
|
|
|
// New{{ pascalize .Name }} creates {{ pascalize .Name }} with default headers values
|
|
func New{{ pascalize .Name }}({{ if eq .Code -1 }}code int{{ end }}) *{{ pascalize .Name }} { {{ if eq .Code -1 }}
|
|
if code <= 0 {
|
|
code = 500
|
|
}
|
|
{{ end }}
|
|
{{ if .Headers.HasSomeDefaults }}
|
|
var (
|
|
// initialize headers with default values
|
|
{{ range .Headers }}
|
|
{{ if .HasDefault -}}
|
|
{{ varname .ID}}Default =
|
|
{{- if and .IsPrimitive .IsCustomFormatter (not (stringContains .Zero "(\"" )) }}{{ .Zero }}{{/* strfmt type initializer requires UnmarshalText(), e.g. Date, Datetime, Duration */}}
|
|
{{- else if and .IsPrimitive .IsCustomFormatter (stringContains .Zero "(\"" ) }}{{.GoType}}({{- printf "%#v" .Default }}){{/* strfmt type initializer takes string */}}
|
|
{{- else if and .IsPrimitive (not .IsCustomFormatter) -}}{{.GoType}}({{- printf "%#v" .Default }}){{/* regular go primitive type initializer */}}
|
|
{{- else if .IsArray -}}{{- /* Do not initialize from possible defaults in nested arrays */ -}}
|
|
{{- if and .Child.IsPrimitive .Child.IsCustomFormatter }}{{ .Zero }}{{/* initialization strategy with UnmarshalText() */}}
|
|
{{- else if .Child.IsArray -}}{{ .Zero }}{{/* initialization strategy with json.Unmarshal() */}}
|
|
{{- else if and .Child.IsPrimitive (not .Child.IsCustomFormatter) -}}{{.GoType}}{{- arrayInitializer .Default }}{{/* regular go primitive type initializer: simple slice initializer */}}
|
|
{{- else }}{{ printf "%#v" .Default }}{{/* all other cases (e.g. schema) [should not occur] */}}
|
|
{{- end }}
|
|
{{- else }}{{ printf "%#v" .Default }}{{/* case .Schema */}}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- end }}
|
|
)
|
|
|
|
{{ range .Headers }}{{ if .HasDefault -}}{{- /* carry on UnmarshalText initialization strategy */ -}}
|
|
{{ if and .IsPrimitive .IsCustomFormatter (not (stringContains .Zero "(\"")) }}{{ varname .ID}}Default.UnmarshalText([]byte({{ printf "%q" .Default }}))
|
|
{{ else if .IsArray -}}
|
|
{{ if or ( and .Child.IsPrimitive .Child.IsCustomFormatter ) .Child.IsArray -}}
|
|
if err := json.Unmarshal([]byte(`{{printf "%s" (json .Default)}}`), &{{ varname .ID }}Default); err != nil {
|
|
// panics if specification is invalid
|
|
msg := fmt.Sprintf("invalid default value for header {{ varname .ID }}: %v",err)
|
|
panic(msg)
|
|
}
|
|
{{ end -}}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- end }}
|
|
{{ end }}
|
|
return &{{ pascalize .Name }}{
|
|
{{ if eq .Code -1 }}_statusCode: code,{{ end }}
|
|
{{ range .Headers }}{{ if .HasDefault }}
|
|
{{ pascalize .Name}}: {{ if and (not .IsArray) (not .HasDiscriminator) (not .IsInterface) (not .IsStream) .IsNullable }}&{{ end }}{{ varname .ID }}Default,
|
|
{{ end }}
|
|
{{ end -}}
|
|
}
|
|
}
|
|
|
|
{{ if eq .Code -1 }}
|
|
// WithStatusCode adds the status to the {{ humanize .Name }} response
|
|
func ({{ .ReceiverName }} *{{ pascalize .Name }}) WithStatusCode(code int) *{{ pascalize .Name }} {
|
|
{{ .ReceiverName }}._statusCode = code
|
|
return {{ .ReceiverName }}
|
|
}
|
|
|
|
// SetStatusCode sets the status to the {{ humanize .Name }} response
|
|
func ({{ .ReceiverName }} *{{ pascalize .Name }}) SetStatusCode(code int) {
|
|
{{ .ReceiverName }}._statusCode = code
|
|
}
|
|
{{ end }}{{ range .Headers }}
|
|
// With{{ pascalize .Name }} adds the {{ camelize .Name }} to the {{ humanize $.Name }} response
|
|
func ({{ $.ReceiverName }} *{{ pascalize $.Name }}) With{{ pascalize .Name }}({{ varname .Name }} {{ .GoType}}) *{{ pascalize $.Name }} {
|
|
{{ $.ReceiverName }}.{{ pascalize .Name }} = {{ varname .Name }}
|
|
return {{ .ReceiverName }}
|
|
}
|
|
|
|
// Set{{ pascalize .Name }} sets the {{ camelize .Name }} to the {{ humanize $.Name }} response
|
|
func ({{ $.ReceiverName }} *{{ pascalize $.Name }}) Set{{ pascalize .Name }}({{ varname .Name }} {{ .GoType}}) {
|
|
{{ $.ReceiverName }}.{{ pascalize .Name }} = {{ varname .Name }}
|
|
}
|
|
{{ end }}{{ if .Schema }}
|
|
// WithPayload adds the payload to the {{ humanize .Name }} response
|
|
func ({{ .ReceiverName }} *{{ pascalize .Name }}) WithPayload(payload {{ if and .Schema.IsComplexObject (not .Schema.IsBaseType) }}*{{ end }}{{ .Schema.GoType }}) *{{ pascalize .Name }} {
|
|
{{ .ReceiverName }}.Payload = payload
|
|
return {{ .ReceiverName }}
|
|
}
|
|
|
|
// SetPayload sets the payload to the {{ humanize .Name }} response
|
|
func ({{ .ReceiverName }} *{{ pascalize .Name }}) SetPayload(payload {{ if and .Schema.IsComplexObject (not .Schema.IsBaseType) }}*{{ end }}{{ .Schema.GoType }}) {
|
|
{{ .ReceiverName }}.Payload = payload
|
|
}
|
|
{{ end }}
|
|
|
|
// WriteResponse to the client
|
|
func ({{ .ReceiverName }} *{{ pascalize .Name }}) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
|
|
{{ range .Headers }}
|
|
// response header {{.Name}}
|
|
{{ template "serverheaderbuilder" . -}}
|
|
{{ end }}
|
|
{{ if not .Schema }}
|
|
rw.Header().Del(runtime.HeaderContentType) // Remove Content-Type on empty responses
|
|
{{ end }}
|
|
rw.WriteHeader({{ if eq .Code -1 }}{{ .ReceiverName }}._statusCode{{ else }}{{ .Code }}{{ end }})
|
|
{{- if .Schema }}
|
|
{{- if .Schema.IsComplexObject }}
|
|
if {{ .ReceiverName }}.Payload != nil {
|
|
{{- end }}
|
|
payload := {{ .ReceiverName }}.Payload
|
|
{{- if and (not .Schema.IsInterface) (or .Schema.IsArray .Schema.IsMap) }}
|
|
if payload == nil {
|
|
// return empty {{ if .Schema.IsArray }}array{{ else if .Schema.IsMap }}map{{ end }}
|
|
payload =
|
|
{{- if or .Schema.IsAliased .Schema.IsComplexObject }}
|
|
{{- if and (not .Schema.IsBaseType) .Schema.IsComplexObject }}&{{ end }}{{ .Schema.GoType -}} {}
|
|
{{- else }}
|
|
{{- .Schema.Zero }}
|
|
{{- end }}
|
|
}
|
|
{{ end }}
|
|
if err := producer.Produce(rw, payload); err != nil {
|
|
panic(err) // let the recovery middleware deal with this
|
|
}
|
|
{{- if .Schema.IsComplexObject }}
|
|
}
|
|
{{- end }}
|
|
{{- end }}
|
|
}
|
|
|
|
{{ if $.StrictResponders }}
|
|
func ({{ .ReceiverName }} *{{ pascalize .Name }}) {{ pascalize .OperationName }}Responder() {}
|
|
{{- end }}
|
|
{{ end }}// Code generated by go-swagger; DO NOT EDIT.
|
|
|
|
|
|
{{ if .Copyright -}}// {{ comment .Copyright -}}{{ end }}
|
|
|
|
|
|
package {{ .Package }}
|
|
|
|
// This file was generated by the swagger tool.
|
|
// Editing this file might prove futile when you re-run the swagger generate command
|
|
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/go-openapi/errors"
|
|
"github.com/go-openapi/runtime"
|
|
"github.com/go-openapi/runtime/security"
|
|
"github.com/go-openapi/swag"
|
|
"github.com/go-openapi/validate"
|
|
"github.com/go-openapi/runtime/middleware"
|
|
|
|
{{ imports .DefaultImports }}
|
|
{{ imports .Imports }}
|
|
)
|
|
|
|
{{ range .Responses }}
|
|
{{ template "serverresponse" . }}
|
|
{{ end }}
|
|
{{ if .DefaultResponse }}
|
|
{{ template "serverresponse" .DefaultResponse }}
|
|
{{ end }}
|
|
|
|
{{ if $.StrictResponders }}
|
|
type {{ pascalize .Name }}NotImplementedResponder struct {
|
|
middleware.Responder
|
|
}
|
|
|
|
func (*{{ pascalize .Name }}NotImplementedResponder) {{ pascalize .Name }}Responder() {}
|
|
|
|
func {{ pascalize .Name }}NotImplemented() {{ pascalize .Name }}Responder {
|
|
return &{{ pascalize .Name }}NotImplementedResponder{
|
|
middleware.NotImplemented(
|
|
"operation authentication.{{ pascalize .Name }} has not yet been implemented",
|
|
),
|
|
}
|
|
}
|
|
|
|
type {{ pascalize .Name }}Responder interface {
|
|
middleware.Responder
|
|
{{ pascalize .Name }}Responder()
|
|
}
|
|
{{ end }}
|