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}}