241 lines
7.2 KiB
Cheetah
241 lines
7.2 KiB
Cheetah
{{define "Type"}}
|
|
{{- $typeName := index . 0 -}}
|
|
{{- $disablePointer := index . 1 -}}
|
|
|
|
{{- if eq $typeName "string" -}}
|
|
{{- if not $disablePointer -}}*{{- end -}}string
|
|
{{- else if eq $typeName "boolean" -}}
|
|
{{- if not $disablePointer -}}*{{- end -}}bool
|
|
{{- else if eq $typeName "integer" -}}
|
|
{{- if not $disablePointer -}}*{{- end -}}int
|
|
{{- else if eq $typeName "timestamp" -}}
|
|
{{- if not $disablePointer -}}*{{- end -}}time.Time
|
|
{{- else if eq $typeName "binary" -}}
|
|
io.Reader
|
|
{{- else if eq $typeName "array" -}}
|
|
interface{}
|
|
{{- else if eq $typeName "object" -}}
|
|
interface{}
|
|
{{- else if eq $typeName "map" -}}
|
|
interface{}
|
|
{{- else if eq $typeName "any" -}}
|
|
interface{}
|
|
{{- else if eq $typeName "" -}}
|
|
interface{}
|
|
{{- else -}}
|
|
*{{$typeName | camelCase}}
|
|
{{- end -}}
|
|
{{end}}
|
|
|
|
{{define "PropertyType"}}
|
|
{{- $property := index . 0 -}}
|
|
{{- $disablePointer := index . 1 -}}
|
|
|
|
{{- if eq $property.Type "object" -}}
|
|
{{template "Type" passThrough $property.ExtraType $disablePointer}}
|
|
{{- else if eq $property.Type "array" -}}
|
|
[]{{template "Type" passThrough $property.ExtraType $disablePointer}}
|
|
{{- else if eq $property.Type "map" -}}
|
|
map[string]{{template "Type" passThrough $property.ExtraType $disablePointer}}
|
|
{{- else if eq $property.Type "any" -}}
|
|
{{template "Type" passThrough $property.Type $disablePointer}}
|
|
{{- else -}}
|
|
{{template "Type" passThrough $property.Type $disablePointer}}
|
|
{{- end -}}
|
|
{{end}}
|
|
|
|
{{define "PropertyTags"}}
|
|
{{- $property := . -}}
|
|
{{- printf `json:"%s"` ($property.Name | normalized) -}}
|
|
{{- printf ` name:"%s"` ($property.Name | normalized) -}}
|
|
{{- if $property.Format}}
|
|
{{- printf ` format:"%s"` $property.Format -}}
|
|
{{- end -}}
|
|
{{- if $property.Default -}}
|
|
{{- printf ` default:"%s"` $property.Default -}}
|
|
{{- end -}}
|
|
{{end}}
|
|
|
|
{{define "PropertyExtraTags"}}
|
|
{{- $PropertyExtraTags := . -}}
|
|
{{- if $PropertyExtraTags -}}
|
|
{{- printf " %s" $PropertyExtraTags -}}
|
|
{{- end -}}
|
|
{{end}}
|
|
|
|
{{define "RenderProperties"}}
|
|
{{- $customizedType := index . 0 -}}
|
|
{{- $PropertyExtraTags := index . 1 -}}
|
|
|
|
{{range $_, $property := $customizedType.Properties -}}
|
|
{{if $property.Description -}}
|
|
// {{$property.Description}}
|
|
{{end -}}
|
|
{{if $property.Enum -}}
|
|
// {{$property.ID | camelCase}}'s available values: {{$property.Enum | commaConnected}}
|
|
{{end -}}
|
|
{{$property.ID | camelCase | upperFirst}}{{" " -}}
|
|
{{template "PropertyType" passThrough $property false}}{{" " -}}
|
|
`{{template "PropertyTags" $property}}{{template "PropertyExtraTags" $PropertyExtraTags}}`{{" " -}}
|
|
{{if $property.IsRequired -}}
|
|
// Required
|
|
{{- end}}
|
|
{{end -}}
|
|
{{end}}
|
|
|
|
{{define "RenderOperation"}}
|
|
{{$belongs := index . 0}}
|
|
{{$operation := index . 1}}
|
|
|
|
{{$opID := $operation.ID | camelCase}}
|
|
|
|
{{if $operation.Description -}}
|
|
// {{$opID}}: {{$operation.Description}}
|
|
{{- end}}
|
|
{{if $operation.DocumentationURL -}}
|
|
// Documentation URL: {{$operation.DocumentationURL}}
|
|
{{- end}}
|
|
func (s *{{$belongs}}) {{$opID}}(i *{{$opID}}Input) (*{{$opID}}Output, error) {
|
|
if i == nil {
|
|
i = &{{$opID}}Input{}
|
|
}
|
|
o := &data.Operation{
|
|
Config: s.Config,
|
|
Properties: s.Properties,
|
|
APIName: "{{$operation.Name}}",
|
|
RequestMethod: "{{$operation.Request.Method}}",
|
|
}
|
|
|
|
x := &{{$opID}}Output{}
|
|
r, err := request.New(o, i, x)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = r.Send()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return x, err
|
|
}
|
|
|
|
type {{$opID}}Input struct {
|
|
{{if $operation.Request.Query.Properties | len -}}
|
|
{{$data := $operation.Request.Query}}
|
|
{{template "RenderProperties" passThrough $data `location:"params"`}}
|
|
{{- end -}}
|
|
}
|
|
|
|
func (v *{{$opID}}Input) Validate() error {
|
|
{{template "ValidateCustomizedType" $operation.Request.Query}}
|
|
{{template "ValidateCustomizedType" $operation.Request.Headers}}
|
|
{{template "ValidateCustomizedType" $operation.Request.Elements}}
|
|
|
|
return nil
|
|
}
|
|
|
|
type {{$opID}}Output struct {
|
|
Message *string `json:"message" name:"message"`
|
|
{{- range $k, $reponse := $operation.Responses -}}
|
|
{{- if $reponse.Elements.Properties | len -}}
|
|
{{$data := $reponse.Elements}}
|
|
{{template "RenderProperties" passThrough $data `location:"elements"` $operation.Name}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
}
|
|
{{end}}
|
|
|
|
{{define "SubServiceInitParams"}}
|
|
{{- $customizedType := index . 0 -}}
|
|
{{- $disablePointer := index . 1 -}}
|
|
|
|
{{- range $_, $property := $customizedType.Properties -}}
|
|
{{$property.ID | camelCase | lowerFirstWord}}{{" " -}}
|
|
{{template "PropertyType" passThrough $property $disablePointer}},
|
|
{{- end -}}
|
|
{{end}}
|
|
|
|
{{define "ValidateCustomizedType"}}
|
|
{{$customizedType := .}}
|
|
|
|
{{range $_, $property := $customizedType.Properties}}
|
|
{{$isNormalType := or (eq $property.Type "string") (eq $property.Type "integer")}}
|
|
{{$isContentLength := eq $property.ID "Content-Length"}}
|
|
{{if and $isNormalType (not $isContentLength) }}
|
|
{{if $property.IsRequired }}
|
|
if v.{{$property.ID | camelCase}} == nil {
|
|
return errors.ParameterRequiredError{
|
|
ParameterName: "{{$property.ID | camelCase}}",
|
|
ParentName: "{{$customizedType.ID | camelCase}}",
|
|
}
|
|
}
|
|
{{end}}
|
|
{{$parameterName := $property.ID | camelCase | lowerFirstWord}}
|
|
{{if gt ($property.Enum | len) 0}}
|
|
if v.{{$property.ID | camelCase}} != nil {
|
|
{{$parameterName}}ValidValues := []string{
|
|
{{- $property.Enum | commaConnectedWithQuote -}}
|
|
}
|
|
{{$parameterName}}ParameterValue := fmt.Sprint(*v.{{$property.ID | camelCase}})
|
|
|
|
{{$parameterName}}IsValid := false
|
|
for _, value := range {{$parameterName}}ValidValues {
|
|
if value == {{$parameterName}}ParameterValue {
|
|
{{$parameterName}}IsValid = true
|
|
}
|
|
}
|
|
|
|
if !{{$parameterName}}IsValid {
|
|
return errors.ParameterValueNotAllowedError{
|
|
ParameterName: "{{$property.ID | camelCase}}",
|
|
ParameterValue: {{$parameterName}}ParameterValue,
|
|
AllowedValues: {{$parameterName}}ValidValues,
|
|
}
|
|
}
|
|
}
|
|
{{end}}
|
|
{{end}}
|
|
|
|
{{if and (eq $property.Type "object") (ne $property.ExtraType "") }}
|
|
if v.{{$property.ID | camelCase}} != nil {
|
|
if err := v.{{$property.ID | camelCase}}.Validate(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
{{if $property.IsRequired }}
|
|
if v.{{$property.ID | camelCase}} == nil {
|
|
return errors.ParameterRequiredError{
|
|
ParameterName: "{{$property.ID | camelCase}}",
|
|
ParentName: "{{$customizedType.ID | camelCase}}",
|
|
}
|
|
}
|
|
{{end}}
|
|
{{end}}
|
|
|
|
{{if eq $property.Type "array"}}
|
|
{{if $property.IsRequired}}
|
|
if len(v.{{$property.ID | camelCase}}) == 0 {
|
|
return errors.ParameterRequiredError{
|
|
ParameterName: "{{$property.ID | camelCase}}",
|
|
ParentName: "{{$customizedType.ID | camelCase}}",
|
|
}
|
|
}
|
|
{{end}}
|
|
{{$isNotString := ne $property.ExtraType "string"}}
|
|
{{$isNotInteger := ne $property.ExtraType "integer"}}
|
|
{{$isNotTimestamp := ne $property.ExtraType "timestamp"}}
|
|
{{$isNotInterface := ne $property.ExtraType "object"}}
|
|
{{if and $isNotString $isNotInteger $isNotTimestamp $isNotInterface}}
|
|
if len(v.{{$property.ID | camelCase}}) > 0 {
|
|
for _, property := range v.{{$property.ID | camelCase}} {
|
|
if err := property.Validate(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
{{end}}
|
|
{{end}}
|
|
{{end}}
|
|
{{end}}
|