From e55664cdc99c7f135b46ead31c12dfbc49b24f96 Mon Sep 17 00:00:00 2001 From: Dan Wilson Date: Tue, 13 Dec 2016 02:13:06 -0600 Subject: [PATCH] Remove invalid code from mustache for arrays. (#4266) Rewrite ParameterToString to handle other slice types other than just string. --- .../src/main/resources/go/api.mustache | 11 +++----- .../src/main/resources/go/api_client.mustache | 27 ++++++++++--------- .../client/petstore/go/go-petstore/README.md | 2 ++ .../petstore/go/go-petstore/api_client.go | 27 ++++++++++--------- .../petstore/go/go-petstore/class_model.go | 17 ++++++++++++ .../go/go-petstore/docs/ClassModel.md | 10 +++++++ .../petstore/go/go-petstore/docs/EnumTest.md | 1 + .../petstore/go/go-petstore/docs/FakeApi.md | 2 +- .../petstore/go/go-petstore/docs/OuterEnum.md | 9 +++++++ .../petstore/go/go-petstore/docs/PetApi.md | 2 +- .../petstore/go/go-petstore/docs/StoreApi.md | 2 +- .../petstore/go/go-petstore/docs/UserApi.md | 2 +- .../petstore/go/go-petstore/enum_test.go | 2 ++ .../petstore/go/go-petstore/fake_api.go | 13 +++------ .../petstore/go/go-petstore/outer_enum.go | 14 ++++++++++ .../client/petstore/go/go-petstore/pet_api.go | 18 +++---------- .../petstore/go/go-petstore/user_api.go | 4 +-- 17 files changed, 102 insertions(+), 61 deletions(-) create mode 100644 samples/client/petstore/go/go-petstore/class_model.go create mode 100644 samples/client/petstore/go/go-petstore/docs/ClassModel.md create mode 100644 samples/client/petstore/go/go-petstore/docs/OuterEnum.md create mode 100644 samples/client/petstore/go/go-petstore/outer_enum.go diff --git a/modules/swagger-codegen/src/main/resources/go/api.mustache b/modules/swagger-codegen/src/main/resources/go/api.mustache index 186fe556c06..33f11a0bde1 100644 --- a/modules/swagger-codegen/src/main/resources/go/api.mustache +++ b/modules/swagger-codegen/src/main/resources/go/api.mustache @@ -83,16 +83,11 @@ func (a {{{classname}}}) {{{nickname}}}({{#allParams}}{{paramName}} {{{dataType} {{#queryParams}} {{#isListContainer}} var collectionFormat = "{{#collectionFormat}}{{collectionFormat}}{{/collectionFormat}}" - if collectionFormat == "multi" { - for _, value := range {{paramName}} { - localVarQueryParams.Add("{{baseName}}", value) - } - } else { - localVarQueryParams.Add("{{baseName}}", a.Configuration.APIClient.ParameterToString({{paramName}}, collectionFormat)) - } + localVarQueryParams.Add("{{baseName}}", a.Configuration.APIClient.ParameterToString({{paramName}}, collectionFormat)) + {{/isListContainer}} {{^isListContainer}} - localVarQueryParams.Add("{{baseName}}", a.Configuration.APIClient.ParameterToString({{paramName}}, "")) + localVarQueryParams.Add("{{baseName}}", a.Configuration.APIClient.ParameterToString({{paramName}}, "")) {{/isListContainer}} {{/queryParams}} {{/hasQueryParams}} diff --git a/modules/swagger-codegen/src/main/resources/go/api_client.mustache b/modules/swagger-codegen/src/main/resources/go/api_client.mustache index a92c7631202..e4ae2d09904 100644 --- a/modules/swagger-codegen/src/main/resources/go/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/go/api_client.mustache @@ -79,18 +79,21 @@ func (c *APIClient) CallAPI(path string, method string, return nil, fmt.Errorf("invalid method %v", method) } -func (c *APIClient) ParameterToString(obj interface{},collectionFormat string) string { - if reflect.TypeOf(obj).String() == "[]string" { - switch collectionFormat { - case "pipes": - return strings.Join(obj.([]string), "|") - case "ssv": - return strings.Join(obj.([]string), " ") - case "tsv": - return strings.Join(obj.([]string), "\t") - case "csv" : - return strings.Join(obj.([]string), ",") - } +func (c *APIClient) ParameterToString(obj interface{}, collectionFormat string) string { + delimiter := "" + switch collectionFormat { + case "pipes": + delimiter = "|" + case "ssv": + delimiter = " " + case "tsv": + delimiter = "\t" + case "csv": + delimiter = "," + } + + if reflect.TypeOf(obj).Kind() == reflect.Slice { + return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]") } return fmt.Sprintf("%v", obj) diff --git a/samples/client/petstore/go/go-petstore/README.md b/samples/client/petstore/go/go-petstore/README.md index 164eaf91c07..1f00e75f05f 100644 --- a/samples/client/petstore/go/go-petstore/README.md +++ b/samples/client/petstore/go/go-petstore/README.md @@ -56,6 +56,7 @@ Class | Method | HTTP request | Description - [ArrayTest](docs/ArrayTest.md) - [Cat](docs/Cat.md) - [Category](docs/Category.md) + - [ClassModel](docs/ClassModel.md) - [Client](docs/Client.md) - [Dog](docs/Dog.md) - [EnumArrays](docs/EnumArrays.md) @@ -72,6 +73,7 @@ Class | Method | HTTP request | Description - [Name](docs/Name.md) - [NumberOnly](docs/NumberOnly.md) - [Order](docs/Order.md) + - [OuterEnum](docs/OuterEnum.md) - [Pet](docs/Pet.md) - [ReadOnlyFirst](docs/ReadOnlyFirst.md) - [SpecialModelName](docs/SpecialModelName.md) diff --git a/samples/client/petstore/go/go-petstore/api_client.go b/samples/client/petstore/go/go-petstore/api_client.go index d2cdab388eb..a93f346e102 100644 --- a/samples/client/petstore/go/go-petstore/api_client.go +++ b/samples/client/petstore/go/go-petstore/api_client.go @@ -88,18 +88,21 @@ func (c *APIClient) CallAPI(path string, method string, return nil, fmt.Errorf("invalid method %v", method) } -func (c *APIClient) ParameterToString(obj interface{},collectionFormat string) string { - if reflect.TypeOf(obj).String() == "[]string" { - switch collectionFormat { - case "pipes": - return strings.Join(obj.([]string), "|") - case "ssv": - return strings.Join(obj.([]string), " ") - case "tsv": - return strings.Join(obj.([]string), "\t") - case "csv" : - return strings.Join(obj.([]string), ",") - } +func (c *APIClient) ParameterToString(obj interface{}, collectionFormat string) string { + delimiter := "" + switch collectionFormat { + case "pipes": + delimiter = "|" + case "ssv": + delimiter = " " + case "tsv": + delimiter = "\t" + case "csv": + delimiter = "," + } + + if reflect.TypeOf(obj).Kind() == reflect.Slice { + return strings.Trim(strings.Replace(fmt.Sprint(obj), " ", delimiter, -1), "[]") } return fmt.Sprintf("%v", obj) diff --git a/samples/client/petstore/go/go-petstore/class_model.go b/samples/client/petstore/go/go-petstore/class_model.go new file mode 100644 index 00000000000..efcd6540b20 --- /dev/null +++ b/samples/client/petstore/go/go-petstore/class_model.go @@ -0,0 +1,17 @@ +/* + * Swagger Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * OpenAPI spec version: 1.0.0 + * Contact: apiteam@swagger.io + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package petstore + +// Model for testing model with \"_class\" property +type ClassModel struct { + + Class string `json:"_class,omitempty"` +} diff --git a/samples/client/petstore/go/go-petstore/docs/ClassModel.md b/samples/client/petstore/go/go-petstore/docs/ClassModel.md new file mode 100644 index 00000000000..d9005f21a01 --- /dev/null +++ b/samples/client/petstore/go/go-petstore/docs/ClassModel.md @@ -0,0 +1,10 @@ +# ClassModel + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Class** | **string** | | [optional] [default to null] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/go/go-petstore/docs/EnumTest.md b/samples/client/petstore/go/go-petstore/docs/EnumTest.md index fe6ca0cb32d..2e67672188e 100644 --- a/samples/client/petstore/go/go-petstore/docs/EnumTest.md +++ b/samples/client/petstore/go/go-petstore/docs/EnumTest.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes **EnumString** | **string** | | [optional] [default to null] **EnumInteger** | **int32** | | [optional] [default to null] **EnumNumber** | **float64** | | [optional] [default to null] +**OuterEnum** | [**OuterEnum**](OuterEnum.md) | | [optional] [default to null] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/samples/client/petstore/go/go-petstore/docs/FakeApi.md b/samples/client/petstore/go/go-petstore/docs/FakeApi.md index ce6a7292d33..915750589e4 100644 --- a/samples/client/petstore/go/go-petstore/docs/FakeApi.md +++ b/samples/client/petstore/go/go-petstore/docs/FakeApi.md @@ -1,6 +1,6 @@ # \FakeApi -All URIs are relative to *http://petstore.swagger.io/v2* +All URIs are relative to ** Method | HTTP request | Description ------------- | ------------- | ------------- diff --git a/samples/client/petstore/go/go-petstore/docs/OuterEnum.md b/samples/client/petstore/go/go-petstore/docs/OuterEnum.md new file mode 100644 index 00000000000..06d413b0168 --- /dev/null +++ b/samples/client/petstore/go/go-petstore/docs/OuterEnum.md @@ -0,0 +1,9 @@ +# OuterEnum + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/samples/client/petstore/go/go-petstore/docs/PetApi.md b/samples/client/petstore/go/go-petstore/docs/PetApi.md index e96bdc1a15e..2bccb81cd2b 100644 --- a/samples/client/petstore/go/go-petstore/docs/PetApi.md +++ b/samples/client/petstore/go/go-petstore/docs/PetApi.md @@ -1,6 +1,6 @@ # \PetApi -All URIs are relative to *http://petstore.swagger.io/v2* +All URIs are relative to ** Method | HTTP request | Description ------------- | ------------- | ------------- diff --git a/samples/client/petstore/go/go-petstore/docs/StoreApi.md b/samples/client/petstore/go/go-petstore/docs/StoreApi.md index 1ee858d2e30..83841e3f350 100644 --- a/samples/client/petstore/go/go-petstore/docs/StoreApi.md +++ b/samples/client/petstore/go/go-petstore/docs/StoreApi.md @@ -1,6 +1,6 @@ # \StoreApi -All URIs are relative to *http://petstore.swagger.io/v2* +All URIs are relative to ** Method | HTTP request | Description ------------- | ------------- | ------------- diff --git a/samples/client/petstore/go/go-petstore/docs/UserApi.md b/samples/client/petstore/go/go-petstore/docs/UserApi.md index 4950105ca86..88b825bb148 100644 --- a/samples/client/petstore/go/go-petstore/docs/UserApi.md +++ b/samples/client/petstore/go/go-petstore/docs/UserApi.md @@ -1,6 +1,6 @@ # \UserApi -All URIs are relative to *http://petstore.swagger.io/v2* +All URIs are relative to ** Method | HTTP request | Description ------------- | ------------- | ------------- diff --git a/samples/client/petstore/go/go-petstore/enum_test.go b/samples/client/petstore/go/go-petstore/enum_test.go index b76c647878f..086c239379b 100644 --- a/samples/client/petstore/go/go-petstore/enum_test.go +++ b/samples/client/petstore/go/go-petstore/enum_test.go @@ -17,4 +17,6 @@ type EnumTest struct { EnumInteger int32 `json:"enum_integer,omitempty"` EnumNumber float64 `json:"enum_number,omitempty"` + + OuterEnum OuterEnum `json:"outerEnum,omitempty"` } diff --git a/samples/client/petstore/go/go-petstore/fake_api.go b/samples/client/petstore/go/go-petstore/fake_api.go index 49f9d8b7022..2170fe29f08 100644 --- a/samples/client/petstore/go/go-petstore/fake_api.go +++ b/samples/client/petstore/go/go-petstore/fake_api.go @@ -219,15 +219,10 @@ func (a FakeApi) TestEnumParameters(enumFormStringArray []string, enumFormString localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] } var collectionFormat = "csv" - if collectionFormat == "multi" { - for _, value := range enumQueryStringArray { - localVarQueryParams.Add("enum_query_string_array", value) - } - } else { - localVarQueryParams.Add("enum_query_string_array", a.Configuration.APIClient.ParameterToString(enumQueryStringArray, collectionFormat)) - } - localVarQueryParams.Add("enum_query_string", a.Configuration.APIClient.ParameterToString(enumQueryString, "")) - localVarQueryParams.Add("enum_query_integer", a.Configuration.APIClient.ParameterToString(enumQueryInteger, "")) + localVarQueryParams.Add("enum_query_string_array", a.Configuration.APIClient.ParameterToString(enumQueryStringArray, collectionFormat)) + + localVarQueryParams.Add("enum_query_string", a.Configuration.APIClient.ParameterToString(enumQueryString, "")) + localVarQueryParams.Add("enum_query_integer", a.Configuration.APIClient.ParameterToString(enumQueryInteger, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{ "*/*", } diff --git a/samples/client/petstore/go/go-petstore/outer_enum.go b/samples/client/petstore/go/go-petstore/outer_enum.go new file mode 100644 index 00000000000..45cb3276ad1 --- /dev/null +++ b/samples/client/petstore/go/go-petstore/outer_enum.go @@ -0,0 +1,14 @@ +/* + * Swagger Petstore + * + * This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\ + * + * OpenAPI spec version: 1.0.0 + * Contact: apiteam@swagger.io + * Generated by: https://github.com/swagger-api/swagger-codegen.git + */ + +package petstore + +type OuterEnum struct { +} diff --git a/samples/client/petstore/go/go-petstore/pet_api.go b/samples/client/petstore/go/go-petstore/pet_api.go index 1bb9e596654..6e2f9d24f4b 100644 --- a/samples/client/petstore/go/go-petstore/pet_api.go +++ b/samples/client/petstore/go/go-petstore/pet_api.go @@ -202,13 +202,8 @@ func (a PetApi) FindPetsByStatus(status []string) ([]Pet, *APIResponse, error) { localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] } var collectionFormat = "csv" - if collectionFormat == "multi" { - for _, value := range status { - localVarQueryParams.Add("status", value) - } - } else { - localVarQueryParams.Add("status", a.Configuration.APIClient.ParameterToString(status, collectionFormat)) - } + localVarQueryParams.Add("status", a.Configuration.APIClient.ParameterToString(status, collectionFormat)) + // to determine the Content-Type header localVarHttpContentTypes := []string{ } @@ -276,13 +271,8 @@ func (a PetApi) FindPetsByTags(tags []string) ([]Pet, *APIResponse, error) { localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] } var collectionFormat = "csv" - if collectionFormat == "multi" { - for _, value := range tags { - localVarQueryParams.Add("tags", value) - } - } else { - localVarQueryParams.Add("tags", a.Configuration.APIClient.ParameterToString(tags, collectionFormat)) - } + localVarQueryParams.Add("tags", a.Configuration.APIClient.ParameterToString(tags, collectionFormat)) + // to determine the Content-Type header localVarHttpContentTypes := []string{ } diff --git a/samples/client/petstore/go/go-petstore/user_api.go b/samples/client/petstore/go/go-petstore/user_api.go index 25e1f359ae1..2f574a8182c 100644 --- a/samples/client/petstore/go/go-petstore/user_api.go +++ b/samples/client/petstore/go/go-petstore/user_api.go @@ -366,8 +366,8 @@ func (a UserApi) LoginUser(username string, password string) (*string, *APIRespo for key := range a.Configuration.DefaultHeader { localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] } - localVarQueryParams.Add("username", a.Configuration.APIClient.ParameterToString(username, "")) - localVarQueryParams.Add("password", a.Configuration.APIClient.ParameterToString(password, "")) + localVarQueryParams.Add("username", a.Configuration.APIClient.ParameterToString(username, "")) + localVarQueryParams.Add("password", a.Configuration.APIClient.ParameterToString(password, "")) // to determine the Content-Type header localVarHttpContentTypes := []string{ }