github.com/phrase/openapi@v0.0.0-20240514140800-49e8a106740e/openapi-generator/templates/go/api.mustache (about) 1 package {{packageName}} 2 3 {{#operations}} 4 import ( 5 "fmt" 6 7 _context "context" 8 _ioutil "io/ioutil" 9 _nethttp "net/http" 10 _neturl "net/url" 11 {{#imports}} "{{import}}" 12 {{/imports}} 13 "github.com/antihax/optional" 14 ) 15 16 // Linger please 17 var ( 18 _ _context.Context 19 ) 20 21 // {{classname}}Service {{classname}} service 22 type {{classname}}Service service 23 {{#operation}} 24 25 {{#hasOptionalParams}} 26 // {{#structPrefix}}{{&classname}}{{/structPrefix}}{{{nickname}}}Opts Optional parameters for the method '{{{nickname}}}' 27 type {{#structPrefix}}{{&classname}}{{/structPrefix}}{{{nickname}}}Opts struct { 28 {{#allParams}} 29 {{^required}} 30 {{#isPrimitiveType}} 31 {{^isBinary}} 32 {{vendorExtensions.x-export-param-name}} optional.{{#lambda.titlecase}}{{dataType}}{{/lambda.titlecase}} `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#withXml}} xml:"{{baseName}}{{#isXmlAttribute}},attr{{/isXmlAttribute}}"{{/withXml}}{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}` 33 {{/isBinary}} 34 {{#isBinary}} 35 {{vendorExtensions.x-export-param-name}} optional.Interface `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#withXml}} xml:"{{baseName}}{{#isXmlAttribute}},attr{{/isXmlAttribute}}"{{/withXml}}{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}` 36 {{/isBinary}} 37 {{/isPrimitiveType}} 38 {{^isPrimitiveType}} 39 {{vendorExtensions.x-export-param-name}} optional.Interface `json:"{{baseName}}{{^required}},omitempty{{/required}}"{{#withXml}} xml:"{{baseName}}{{#isXmlAttribute}},attr{{/isXmlAttribute}}"{{/withXml}}{{#vendorExtensions.x-go-custom-tag}} {{{.}}}{{/vendorExtensions.x-go-custom-tag}}` 40 {{/isPrimitiveType}} 41 {{/required}} 42 {{/allParams}} 43 } 44 45 {{/hasOptionalParams}} 46 /* 47 {{operationId}}{{#summary}} {{{.}}}{{/summary}}{{^summary}} Method for {{operationId}}{{/summary}} 48 {{#notes}} 49 {{notes}} 50 {{/notes}} 51 * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). 52 {{#allParams}} 53 {{#required}} 54 * @param {{paramName}}{{#description}} {{{.}}}{{/description}} 55 {{/required}} 56 {{/allParams}} 57 {{#hasOptionalParams}} 58 * @param optional nil or *{{#structPrefix}}{{&classname}}{{/structPrefix}}{{{nickname}}}Opts - Optional Parameters: 59 {{#allParams}} 60 {{^required}} 61 * @param "{{vendorExtensions.x-export-param-name}}" ({{#isPrimitiveType}}{{^isBinary}}optional.{{#lambda.titlecase}}{{dataType}}{{/lambda.titlecase}}{{/isBinary}}{{#isBinary}}optional.Interface of {{dataType}}{{/isBinary}}{{/isPrimitiveType}}{{^isPrimitiveType}}optional.Interface of {{dataType}}{{/isPrimitiveType}}) - {{#description}} {{{.}}}{{/description}} 62 {{/required}} 63 {{/allParams}} 64 {{/hasOptionalParams}} 65 {{#returnType}} 66 @return {{{returnType}}} 67 {{/returnType}} 68 */ 69 func (a *{{{classname}}}Service) {{{nickname}}}(ctx _context.Context{{#hasParams}}, {{/hasParams}}{{#allParams}}{{#required}}{{paramName}} {{{dataType}}}{{^-last}}, {{/-last}}{{/required}}{{/allParams}}{{#hasOptionalParams}}localVarOptionals *{{#structPrefix}}{{&classname}}{{/structPrefix}}{{{nickname}}}Opts{{/hasOptionalParams}}) ({{#returnType}}{{{returnType}}}, {{/returnType}}{{^returnType}}[]byte, {{/returnType}}*APIResponse, error) { 70 var ( 71 localVarHTTPMethod = _nethttp.Method{{httpMethod}} 72 localVarPostBody interface{} 73 localVarFormFileName string 74 localVarFileName string 75 localVarFileBytes []byte 76 {{#returnType}} 77 localVarReturnValue {{{returnType}}} 78 {{/returnType}} 79 ) 80 81 // create path and map variables 82 localVarPath := a.client.cfg.BasePath + "{{{path}}}"{{#pathParams}} 83 localVarPath = strings.Replace(localVarPath, "{"+"{{baseName}}"+"}", _neturl.QueryEscape(parameterToString({{paramName}}, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")) , -1) 84 {{/pathParams}} 85 86 localVarHeaderParams := make(map[string]string) 87 localVarQueryParams := _neturl.Values{} 88 localVarFormParams := _neturl.Values{} 89 {{#allParams}} 90 {{#required}} 91 {{#minItems}} 92 if len({{paramName}}) < {{minItems}} { 93 return {{#returnType}}localVarReturnValue, {{/returnType}}nil, reportError("{{paramName}} must have at least {{minItems}} elements") 94 } 95 {{/minItems}} 96 {{#maxItems}} 97 if len({{paramName}}) > {{maxItems}} { 98 return {{#returnType}}localVarReturnValue, {{/returnType}}nil, reportError("{{paramName}} must have less than {{maxItems}} elements") 99 } 100 {{/maxItems}} 101 {{#minLength}} 102 if strlen({{paramName}}) < {{minLength}} { 103 return {{#returnType}}localVarReturnValue, {{/returnType}}nil, reportError("{{paramName}} must have at least {{minLength}} elements") 104 } 105 {{/minLength}} 106 {{#maxLength}} 107 if strlen({{paramName}}) > {{maxLength}} { 108 return {{#returnType}}localVarReturnValue, {{/returnType}}nil, reportError("{{paramName}} must have less than {{maxLength}} elements") 109 } 110 {{/maxLength}} 111 {{#minimum}} 112 {{#isString}} 113 {{paramName}}Txt, err := atoi({{paramName}}) 114 if {{paramName}}Txt < {{minimum}} { 115 {{/isString}} 116 {{^isString}} 117 if {{paramName}} < {{minimum}} { 118 {{/isString}} 119 return {{#returnType}}localVarReturnValue, {{/returnType}}nil, reportError("{{paramName}} must be greater than {{minimum}}") 120 } 121 {{/minimum}} 122 {{#maximum}} 123 {{#isString}} 124 {{paramName}}Txt, err := atoi({{paramName}}) 125 if {{paramName}}Txt > {{maximum}} { 126 {{/isString}} 127 {{^isString}} 128 if {{paramName}} > {{maximum}} { 129 {{/isString}} 130 return {{#returnType}}localVarReturnValue, {{/returnType}}nil, reportError("{{paramName}} must be less than {{maximum}}") 131 } 132 {{/maximum}} 133 {{/required}} 134 {{/allParams}} 135 136 {{#hasQueryParams}} 137 {{#queryParams}} 138 {{#required}} 139 {{#isCollectionFormatMulti}} 140 { 141 t:={{paramName}} 142 if reflect.TypeOf(t).Kind() == reflect.Slice { 143 s := reflect.ValueOf(t) 144 for i := 0; i < s.Len(); i++ { 145 localVarQueryParams.Add("{{baseName}}", parameterToString(s.Index(i), "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")) 146 } 147 } else { 148 localVarQueryParams.Add("{{baseName}}", parameterToString(t, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")) 149 } 150 } 151 {{/isCollectionFormatMulti}} 152 {{^isCollectionFormatMulti}} 153 localVarQueryParams.Add("{{baseName}}", parameterToString({{paramName}}, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")) 154 {{/isCollectionFormatMulti}} 155 {{/required}} 156 {{^required}} 157 if localVarOptionals != nil && localVarOptionals.{{vendorExtensions.x-export-param-name}}.IsSet() { 158 {{#isCollectionFormatMulti}} 159 t:=localVarOptionals.{{vendorExtensions.x-export-param-name}}.Value() 160 if reflect.TypeOf(t).Kind() == reflect.Slice { 161 s := reflect.ValueOf(t) 162 for i := 0; i < s.Len(); i++ { 163 localVarQueryParams.Add("{{baseName}}", parameterToString(s.Index(i), "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")) 164 } 165 } else { 166 localVarQueryParams.Add("{{baseName}}", parameterToString(t, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")) 167 } 168 {{/isCollectionFormatMulti}} 169 {{^isCollectionFormatMulti}} 170 {{#isPrimitiveType}}localVarQueryParams.Add("{{baseName}}", parameterToString(localVarOptionals.{{vendorExtensions.x-export-param-name}}.Value(), "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")){{/isPrimitiveType}}{{^isPrimitiveType}}for key, value := range localVarOptionals.{{vendorExtensions.x-export-param-name}}.Value().(map[string]interface{}) { 171 localVarQueryParams.Add(fmt.Sprintf("{{baseName}}[%s]", key), parameterToString(value, "")) 172 }{{/isPrimitiveType}} 173 {{/isCollectionFormatMulti}} 174 } 175 {{/required}} 176 {{/queryParams}} 177 {{/hasQueryParams}} 178 // to determine the Content-Type header 179 {{=<% %>=}} 180 localVarHTTPContentTypes := []string{<%#consumes%>"<%&mediaType%>"<%^-last%>, <%/-last%><%/consumes%>} 181 <%={{ }}=%> 182 183 // set Content-Type header 184 localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) 185 if localVarHTTPContentType != "" { 186 localVarHeaderParams["Content-Type"] = localVarHTTPContentType 187 } 188 189 // to determine the Accept header 190 {{=<% %>=}} 191 localVarHTTPHeaderAccepts := []string{<%#produces%>"<%&mediaType%>"<%^-last%>, <%/-last%><%/produces%>} 192 <%={{ }}=%> 193 194 // set Accept header 195 localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) 196 if localVarHTTPHeaderAccept != "" { 197 localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept 198 } 199 {{#hasHeaderParams}} 200 {{#headerParams}} 201 {{#required}} 202 localVarHeaderParams["{{baseName}}"] = parameterToString({{paramName}}, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}") 203 {{/required}} 204 {{^required}} 205 if localVarOptionals != nil && localVarOptionals.{{vendorExtensions.x-export-param-name}}.IsSet() { 206 localVarHeaderParams["{{baseName}}"] = parameterToString(localVarOptionals.{{vendorExtensions.x-export-param-name}}.Value(), "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}") 207 } 208 {{/required}} 209 {{/headerParams}} 210 {{/hasHeaderParams}} 211 {{#hasFormParams}} 212 {{#formParams}} 213 {{#isFile}} 214 localVarFormFileName = "{{baseName}}" 215 {{#required}} 216 localVarFile := {{paramName}} 217 {{/required}} 218 {{^required}} 219 var localVarFile {{dataType}} 220 if localVarOptionals != nil && localVarOptionals.{{vendorExtensions.x-export-param-name}}.IsSet() { 221 localVarFileOk := false 222 localVarFile, localVarFileOk = localVarOptionals.{{vendorExtensions.x-export-param-name}}.Value().({{dataType}}) 223 if !localVarFileOk { 224 return {{#returnType}}localVarReturnValue{{/returnType}}{{^returnType}}nil{{/returnType}}, nil, reportError("{{paramName}} should be {{dataType}}") 225 } 226 } 227 {{/required}} 228 if localVarFile != nil { 229 fbs, _ := _ioutil.ReadAll(localVarFile) 230 localVarFileBytes = fbs 231 localVarFileName = localVarFile.Name() 232 localVarFile.Close() 233 } 234 {{/isFile}} 235 {{^isFile}} 236 {{#required}} 237 localVarFormParams.Add("{{baseName}}", parameterToString({{paramName}}, "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")) 238 {{/required}} 239 {{^required}} 240 {{#isModel}} 241 if localVarOptionals != nil && localVarOptionals.{{vendorExtensions.x-export-param-name}}.IsSet() { 242 paramJson, err := parameterToJson(localVarOptionals.{{vendorExtensions.x-export-param-name}}.Value()) 243 if err != nil { 244 return {{#returnType}}localVarReturnValue, {{/returnType}}nil, err 245 } 246 localVarFormParams.Add("{{baseName}}", paramJson) 247 } 248 {{/isModel}} 249 {{^isModel}} 250 if localVarOptionals != nil && localVarOptionals.{{vendorExtensions.x-export-param-name}}.IsSet() { 251 {{#isPrimitiveType}}localVarFormParams.Add("{{baseName}}", parameterToString(localVarOptionals.{{vendorExtensions.x-export-param-name}}.Value(), "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}")){{/isPrimitiveType}}{{^isPrimitiveType}}for key, value := range localVarOptionals.{{vendorExtensions.x-export-param-name}}.Value().(map[string]interface{}) { 252 localVarFormParams = serializeMapParams(fmt.Sprintf("{{baseName}}[%s]", key), value, localVarFormParams) 253 }{{/isPrimitiveType}} 254 } 255 {{/isModel}} 256 {{/required}} 257 {{/isFile}} 258 {{/formParams}} 259 {{/hasFormParams}} 260 {{#hasBodyParam}} 261 {{#bodyParams}} 262 // body params 263 {{#required}} 264 localVarPostBody = &{{paramName}} 265 {{/required}} 266 {{^required}} 267 if localVarOptionals != nil && localVarOptionals.{{vendorExtensions.x-export-param-name}}.IsSet() { 268 {{#isPrimitiveType}} 269 localVarPostBody = localVarOptionals.{{vendorExtensions.x-export-param-name}}.Value() 270 {{/isPrimitiveType}} 271 {{^isPrimitiveType}} 272 localVarOptional{{vendorExtensions.x-export-param-name}}, localVarOptional{{vendorExtensions.x-export-param-name}}ok := localVarOptionals.{{vendorExtensions.x-export-param-name}}.Value().({{{dataType}}}) 273 if !localVarOptional{{vendorExtensions.x-export-param-name}}ok { 274 return {{#returnType}}localVarReturnValue, {{/returnType}}nil, reportError("{{paramName}} should be {{dataType}}") 275 } 276 localVarPostBody = &localVarOptional{{vendorExtensions.x-export-param-name}} 277 {{/isPrimitiveType}} 278 } 279 280 {{/required}} 281 {{/bodyParams}} 282 {{/hasBodyParam}} 283 {{#authMethods}} 284 {{#isApiKey}} 285 {{^isKeyInCookie}} 286 if ctx != nil { 287 // API Key Authentication 288 if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { 289 var key string 290 if auth.Prefix != "" { 291 key = auth.Prefix + " " + auth.Key 292 } else { 293 key = auth.Key 294 } 295 {{#isKeyInHeader}} 296 localVarHeaderParams["{{keyParamName}}"] = key 297 {{/isKeyInHeader}} 298 {{#isKeyInQuery}} 299 localVarQueryParams.Add("{{keyParamName}}", key) 300 {{/isKeyInQuery}} 301 } 302 } 303 {{/isKeyInCookie}} 304 {{/isApiKey}} 305 {{/authMethods}} 306 r, err := a.client.prepareRequest(ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes) 307 if err != nil { 308 return {{#returnType}}localVarReturnValue, {{/returnType}}{{^returnType}}nil, {{/returnType}}nil, err 309 } 310 311 localVarHTTPResponse, err := a.client.callAPI(r) 312 if err != nil || localVarHTTPResponse == nil { 313 return {{#returnType}}localVarReturnValue, {{/returnType}}{{^returnType}}nil, {{/returnType}}localVarHTTPResponse, err 314 } 315 316 localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body) 317 localVarHTTPResponse.Body.Close() 318 if err != nil { 319 return {{#returnType}}localVarReturnValue, {{/returnType}}{{^returnType}}nil, {{/returnType}}localVarHTTPResponse, err 320 } 321 322 if localVarHTTPResponse.StatusCode >= 300 { 323 newErr := GenericOpenAPIError{ 324 body: localVarBody, 325 error: localVarHTTPResponse.Status, 326 } 327 {{#responses}} 328 {{#dataType}} 329 {{^is1xx}} 330 {{^is2xx}} 331 {{^wildcard}} 332 if localVarHTTPResponse.StatusCode == {{{code}}} { 333 {{/wildcard}} 334 var v {{{dataType}}} 335 err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) 336 if err != nil { 337 newErr.error = err.Error() 338 return {{#returnType}}localVarReturnValue, {{/returnType}}{{^returnType}}nil, {{/returnType}}localVarHTTPResponse, newErr 339 } 340 newErr.model = v 341 {{^-last}} 342 return {{#returnType}}localVarReturnValue, {{/returnType}}{{^returnType}}nil, {{/returnType}}localVarHTTPResponse, newErr 343 {{/-last}} 344 {{^wildcard}} 345 } 346 {{/wildcard}} 347 {{/is2xx}} 348 {{/is1xx}} 349 {{/dataType}} 350 {{/responses}} 351 return {{#returnType}}localVarReturnValue, {{/returnType}}{{^returnType}}localVarBody, {{/returnType}}localVarHTTPResponse, newErr 352 } 353 354 {{#returnType}} 355 err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) 356 if err != nil { 357 newErr := GenericOpenAPIError{ 358 body: localVarBody, 359 error: err.Error(), 360 } 361 return {{#returnType}}localVarReturnValue, {{/returnType}}localVarHTTPResponse, newErr 362 } 363 364 {{/returnType}} 365 return {{#returnType}}localVarReturnValue, {{/returnType}}{{^returnType}}localVarBody, {{/returnType}}localVarHTTPResponse, nil 366 } 367 {{/operation}} 368 {{/operations}}