diff --git a/.travis.yml b/.travis.yml index f0845ec73a6..8af477c8ce6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,11 +11,14 @@ cache: - ${TRAVIS_BUILD_DIR}/examples/browser/node_modules before_install: - ./.travis/install-protoc.sh 3.1.0 -- ./.travis/install-swagger-codegen.sh 2.2.2 +- ./.travis/install-swagger-codegen.sh 2.4.0 - nvm install v6.1 && nvm use v6.1 && node --version - go get github.com/golang/lint/golint - go get github.com/dghubble/sling - go get github.com/go-resty/resty +- go get golang.org/x/oauth2 +- go get golang.org/x/net/context +- go get github.com/go-test/deep install: - go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway - go get github.com/grpc-ecosystem/grpc-gateway/runtime @@ -24,7 +27,7 @@ install: before_script: - sh -c 'cd examples/browser && npm install' script: -- make realclean && make examples SWAGGER_CODEGEN="java -jar $HOME/local/swagger-codegen-cli.jar" +- make realclean && make examples SWAGGER_CODEGEN="java -jar /tmp/swagger-codegen-cli.jar" - if (go version | grep -q "${GO_VERSION_TO_DIFF_TEST}") && [ -z "${GATEWAY_PLUGIN_FLAGS}" ]; then test -z "$(git status --porcelain)" || (git status; git diff; exit 1); fi - env GLOG_logtostderr=1 go test -race -v github.com/grpc-ecosystem/grpc-gateway/... - if (go version | grep -q "${GO_VERSION_TO_DIFF_TEST}") && [ -z "${GATEWAY_PLUGIN_FLAGS}" ]; then env GLOG_logtostderr=1 ./bin/coverage; fi @@ -34,8 +37,8 @@ after_success: - bash <(curl -s https://codecov.io/bash) env: global: - - "PATH=$PATH:$HOME/local/bin" - - GO_VERSION_TO_DIFF_TEST="go version go1\.9\.[0-9]+ linux/amd64" + - "PATH=$PATH:/tmp/proto/bin" + - GO_VERSION_TO_DIFF_TEST="go version go1\.9\.[0-9]\+ linux/amd64" matrix: - GATEWAY_PLUGIN_FLAGS= - GATEWAY_PLUGIN_FLAGS=request_context=false diff --git a/.travis/install-protoc.sh b/.travis/install-protoc.sh index d96c259272a..5fcba067f4b 100755 --- a/.travis/install-protoc.sh +++ b/.travis/install-protoc.sh @@ -4,16 +4,24 @@ if test -z "${protoc_version}"; then echo "Usage: .travis/install-protoc.sh protoc-version" exit 1 fi -if [ "`$HOME/local/bin/protoc-${protoc_version} --version 2>/dev/null | cut -d' ' -f 2`" != ${protoc_version} ]; then - rm -rf $HOME/local/bin $HOME/local/include - mkdir -p $HOME/tmp $HOME/local - cd $HOME/tmp - wget https://github.com/google/protobuf/releases/download/v${protoc_version}/protoc-${protoc_version}-linux-x86_64.zip - unzip protoc-${protoc_version}-linux-x86_64.zip - mv bin $HOME/local/bin - mv include $HOME/local/include +protoc_path="/tmp/proto" +protoc_binary="${protoc_path}/bin/protoc-${protoc_version}" + +if [ "$("${protoc_binary}" --version 2>/dev/null | cut -d' ' -f 2)" != "${protoc_version}" ]; then + rm -rf "${protoc_path:?}/bin" "${protoc_path:?}/include" + + tempdir=$(mktemp -d 2>/dev/null || mktemp -d -t 'protoc') + + mkdir -p "${protoc_path}" + cd "${tempdir}" + + wget "https://github.com/google/protobuf/releases/download/v${protoc_version}/protoc-${protoc_version}-linux-x86_64.zip" + unzip "protoc-${protoc_version}-linux-x86_64.zip" + + mv bin "${protoc_path}/bin" + mv include "${protoc_path}/include" fi -echo \$ $HOME/local/bin/protoc --version -$HOME/local/bin/protoc --version +echo "\$ ${protoc_path}/bin/protoc --version" +"${protoc_path}/bin/protoc" --version diff --git a/.travis/install-swagger-codegen.sh b/.travis/install-swagger-codegen.sh index ad4c8b56815..b16b1557080 100755 --- a/.travis/install-swagger-codegen.sh +++ b/.travis/install-swagger-codegen.sh @@ -5,5 +5,16 @@ if test -z "${codegen_version}"; then exit 1 fi -wget http://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${codegen_version}/swagger-codegen-cli-${codegen_version}.jar \ - -O $HOME/local/swagger-codegen-cli.jar +swagger_codegen_cli="/tmp/swagger-codegen-cli.jar" + +# Want to test with an unreleased version of swagger-codegne-cli? Try out the sonatype repo for the SNAPSHOT builds. +if false; then + # Directory listing can be found at + # https://oss.sonatype.org/content/repositories/snapshots/io/swagger/swagger-codegen-cli/2.4.0-SNAPSHOT/ + # Replace the version number with the appropriate version. + wget https://oss.sonatype.org/content/repositories/snapshots/io/swagger/swagger-codegen-cli/2.4.0-SNAPSHOT/swagger-codegen-cli-2.4.0-20180407.135302-217.jar \ + -O "${swagger_codegen_cli}" +else + wget "http://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${codegen_version}/swagger-codegen-cli-${codegen_version}.jar" \ + -O "${swagger_codegen_cli}" +fi diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4f0c59eea8d..fafe92a796e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,7 @@ Here's the recommended process of contribution. 4. Make sure that your change follows best practices in Go * [Effective Go](https://golang.org/doc/effective_go.html) * [Go Code Review Comments](https://golang.org/wiki/CodeReviewComments) -5. Make sure that `make test` passes. (use swagger-codegen 2.2.2, not newer versions) +5. Make sure that `make test` passes. (use swagger-codegen 2.4.0, not newer versions) 6. Sign [a Contributor License Agreement](https://cla.developers.google.com/clas) 7. Open a pull request in Github diff --git a/Makefile b/Makefile index cc880094592..055840cc123 100644 --- a/Makefile +++ b/Makefile @@ -120,14 +120,20 @@ $(EXAMPLE_SWAGGERSRCS): $(SWAGGER_PLUGIN) $(SWAGGER_EXAMPLES) $(ECHO_EXAMPLE_SRCS): $(ECHO_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ECHO_EXAMPLE_SPEC) \ -l go -o examples/clients/echo --additional-properties packageName=echo - @rm -f $(EXAMPLE_CLIENT_DIR)/echo/README.md \ + @rm -rf $(EXAMPLE_CLIENT_DIR)/echo/README.md \ + $(EXAMPLE_CLIENT_DIR)/echo/docs \ $(EXAMPLE_CLIENT_DIR)/echo/git_push.sh \ + $(EXAMPLE_CLIENT_DIR)/echo/.gitignore \ + $(EXAMPLE_CLIENT_DIR)/echo/.swagger-codegen \ $(EXAMPLE_CLIENT_DIR)/echo/.travis.yml $(ABE_EXAMPLE_SRCS): $(ABE_EXAMPLE_SPEC) $(SWAGGER_CODEGEN) generate -i $(ABE_EXAMPLE_SPEC) \ -l go -o examples/clients/abe --additional-properties packageName=abe - @rm -f $(EXAMPLE_CLIENT_DIR)/abe/README.md \ + @rm -rf $(EXAMPLE_CLIENT_DIR)/abe/README.md \ + $(EXAMPLE_CLIENT_DIR)/abe/docs \ $(EXAMPLE_CLIENT_DIR)/abe/git_push.sh \ + $(EXAMPLE_CLIENT_DIR)/abe/.gitignore \ + $(EXAMPLE_CLIENT_DIR)/abe/.swagger-codegen \ $(EXAMPLE_CLIENT_DIR)/abe/.travis.yml examples: $(EXAMPLE_SVCSRCS) $(EXAMPLE_GWSRCS) $(EXAMPLE_DEPSRCS) $(EXAMPLE_SWAGGERSRCS) $(EXAMPLE_CLIENT_SRCS) diff --git a/examples/client_test.go b/examples/client_test.go index 536a7a27fc2..813e2353f33 100644 --- a/examples/client_test.go +++ b/examples/client_test.go @@ -1,9 +1,12 @@ package main import ( - "reflect" "testing" + "golang.org/x/net/context" + + "github.com/go-test/deep" + "github.com/grpc-ecosystem/grpc-gateway/examples/clients/abe" "github.com/grpc-ecosystem/grpc-gateway/examples/clients/echo" ) @@ -17,10 +20,12 @@ func TestEchoClient(t *testing.T) { return } - cl := echo.NewEchoServiceApiWithBasePath("http://localhost:8080") - resp, _, err := cl.Echo("foo") + config := echo.NewConfiguration() + config.BasePath = "http://localhost:8080" + cl := echo.NewAPIClient(config) + resp, _, err := cl.EchoServiceApi.Echo(context.Background(), "foo") if err != nil { - t.Errorf(`cl.Echo("foo") failed with %v; want success`, err) + t.Errorf(`cl.EchoServiceApi.Echo("foo") failed with %v; want success`, err) } if got, want := resp.Id, "foo"; got != want { t.Errorf("resp.Id = %q; want %q", got, want) @@ -33,11 +38,13 @@ func TestEchoBodyClient(t *testing.T) { return } - cl := echo.NewEchoServiceApiWithBasePath("http://localhost:8080") + config := echo.NewConfiguration() + config.BasePath = "http://localhost:8080" + cl := echo.NewAPIClient(config) req := echo.ExamplepbSimpleMessage{Id: "foo"} - resp, _, err := cl.EchoBody(req) + resp, _, err := cl.EchoServiceApi.EchoBody(context.Background(), req) if err != nil { - t.Errorf("cl.EchoBody(%#v) failed with %v; want success", req, err) + t.Errorf("cl.EchoServiceApi.EchoBody(%#v) failed with %v; want success", req, err) } if got, want := resp.Id, "foo"; got != want { t.Errorf("resp.Id = %q; want %q", got, want) @@ -50,13 +57,18 @@ func TestAbitOfEverythingClient(t *testing.T) { return } - cl := abe.NewABitOfEverythingServiceApiWithBasePath("http://localhost:8080") + config := abe.NewConfiguration() + config.BasePath = "http://localhost:8080" + cl := abe.NewAPIClient(config) testABEClientCreate(t, cl) testABEClientCreateBody(t, cl) } -func testABEClientCreate(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { +func testABEClientCreate(t *testing.T, cl *abe.APIClient) { + abeZERO := abe.ZERO + want := &abe.ExamplepbABitOfEverything{ + Nested: []abe.ABitOfEverythingNested{}, FloatValue: 1.5, DoubleValue: 2.5, Int64Value: "4294967296", @@ -72,8 +84,16 @@ func testABEClientCreate(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { Sint32Value: 2147483647, Sint64Value: "4611686018427387903", NonConventionalNameValue: "camelCase", + // Fields that aren't explictly sent so they will come back with defaults. + EnumValue: &abeZERO, + RepeatedStringValue: []string{}, + MapValue: map[string]abe.ExamplepbNumericEnum{}, + MappedStringValue: map[string]string{}, + MappedNestedValue: map[string]abe.ABitOfEverythingNested{}, + RepeatedEnumValue: []abe.ExamplepbNumericEnum{}, } - resp, _, err := cl.Create( + resp, _, err := cl.ABitOfEverythingServiceApi.Create( + context.Background(), want.FloatValue, want.DoubleValue, want.Int64Value, @@ -91,21 +111,21 @@ func testABEClientCreate(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { want.NonConventionalNameValue, ) if err != nil { - t.Errorf("cl.Create(%#v) failed with %v; want success", want, err) + t.Errorf("cl.EchoServiceApi.Create(%#v) failed with %v; want success", want, err) } if resp.Uuid == "" { t.Errorf("resp.Uuid is empty; want not empty") } resp.Uuid = "" - if got := resp; !reflect.DeepEqual(got, want) { - t.Errorf("resp = %#v; want %#v", got, want) + if diff := deep.Equal(&resp, want); diff != nil { + t.Errorf("Create: %v", diff) } } -func testABEClientCreateBody(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { - t.Log("TODO: support enum") - return - +func testABEClientCreateBody(t *testing.T, cl *abe.APIClient) { + abeOne := abe.ONE + abeFalse := abe.FALSE + abeTrue := abe.TRUE want := abe.ExamplepbABitOfEverything{ FloatValue: 1.5, DoubleValue: 2.5, @@ -125,10 +145,12 @@ func testABEClientCreateBody(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { Nested: []abe.ABitOfEverythingNested{ { + Ok: &abeFalse, Name: "bar", Amount: 10, }, { + Ok: &abeTrue, Name: "baz", Amount: 20, }, @@ -136,27 +158,31 @@ func testABEClientCreateBody(t *testing.T, cl *abe.ABitOfEverythingServiceApi) { RepeatedStringValue: []string{"a", "b", "c"}, OneofString: "x", MapValue: map[string]abe.ExamplepbNumericEnum{ - // "a": abe.ExamplepbNumericEnum_ONE, - // "b": abe.ExamplepbNumericEnum_ZERO, + //TODO: Fix enums + //"a": &abeOne, + //"b": &abeZero, }, MappedStringValue: map[string]string{ "a": "x", "b": "y", }, MappedNestedValue: map[string]abe.ABitOfEverythingNested{ - "a": {Name: "x", Amount: 1}, - "b": {Name: "y", Amount: 2}, + "a": {Ok: &abeFalse, Name: "x", Amount: 1}, + "b": {Ok: &abeTrue, Name: "y", Amount: 2}, }, + + RepeatedEnumValue: []abe.ExamplepbNumericEnum{}, + EnumValue: &abeOne, } - resp, _, err := cl.CreateBody(want) + resp, _, err := cl.ABitOfEverythingServiceApi.CreateBody(context.Background(), want) if err != nil { - t.Errorf("cl.CreateBody(%#v) failed with %v; want success", want, err) + t.Errorf("cl.ABitOfEverythingServiceApi.CreateBody(%#v) failed with %v; want success", want, err) } if resp.Uuid == "" { t.Errorf("resp.Uuid is empty; want not empty") } resp.Uuid = "" - if got := resp; !reflect.DeepEqual(got, want) { - t.Errorf("resp = %#v; want %#v", got, want) + if diff := deep.Equal(resp, want); diff != nil { + t.Errorf("CreateBody: %v", diff) } } diff --git a/examples/clients/abe/.gitignore b/examples/clients/abe/.gitignore deleted file mode 100644 index 2f88269126d..00000000000 --- a/examples/clients/abe/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/docs diff --git a/examples/clients/abe/.swagger-codegen-ignore b/examples/clients/abe/.swagger-codegen-ignore index 6c7b69a0156..c5fa491b4c5 100644 --- a/examples/clients/abe/.swagger-codegen-ignore +++ b/examples/clients/abe/.swagger-codegen-ignore @@ -1 +1,23 @@ -.gitignore +# Swagger Codegen Ignore +# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/examples/clients/abe/ProtobufDuration.go b/examples/clients/abe/ProtobufDuration.go deleted file mode 100644 index 837f298bd91..00000000000 --- a/examples/clients/abe/ProtobufDuration.go +++ /dev/null @@ -1,10 +0,0 @@ -package abe - -import ( -) - -type ProtobufDuration struct { - Seconds string `json:"seconds,omitempty"` - Nanos int32 `json:"nanos,omitempty"` - -} diff --git a/examples/clients/abe/a_bit_of_everything_service_api.go b/examples/clients/abe/a_bit_of_everything_service_api.go deleted file mode 100644 index eec4725130c..00000000000 --- a/examples/clients/abe/a_bit_of_everything_service_api.go +++ /dev/null @@ -1,987 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -import ( - "net/url" - "strings" - "time" - "encoding/json" - "fmt" -) - -type ABitOfEverythingServiceApi struct { - Configuration *Configuration -} - -func NewABitOfEverythingServiceApi() *ABitOfEverythingServiceApi { - configuration := NewConfiguration() - return &ABitOfEverythingServiceApi{ - Configuration: configuration, - } -} - -func NewABitOfEverythingServiceApiWithBasePath(basePath string) *ABitOfEverythingServiceApi { - configuration := NewConfiguration() - configuration.BasePath = basePath - - return &ABitOfEverythingServiceApi{ - Configuration: configuration, - } -} - -/** - * - * - * @param floatValue - * @param doubleValue - * @param int64Value - * @param uint64Value - * @param int32Value - * @param fixed64Value - * @param fixed32Value - * @param boolValue - * @param stringValue - * @param uint32Value - * @param sfixed32Value - * @param sfixed64Value - * @param sint32Value - * @param sint64Value - * @param nonConventionalNameValue - * @return *ExamplepbABitOfEverything - */ -func (a ABitOfEverythingServiceApi) Create(floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string) (*ExamplepbABitOfEverything, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}" - localVarPath = strings.Replace(localVarPath, "{"+"float_value"+"}", fmt.Sprintf("%v", floatValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"double_value"+"}", fmt.Sprintf("%v", doubleValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"int64_value"+"}", fmt.Sprintf("%v", int64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"uint64_value"+"}", fmt.Sprintf("%v", uint64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"int32_value"+"}", fmt.Sprintf("%v", int32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"fixed64_value"+"}", fmt.Sprintf("%v", fixed64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"fixed32_value"+"}", fmt.Sprintf("%v", fixed32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"bool_value"+"}", fmt.Sprintf("%v", boolValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"string_value"+"}", fmt.Sprintf("%v", stringValue), -1) - localVarPath = strings.Replace(localVarPath, "{"+"uint32_value"+"}", fmt.Sprintf("%v", uint32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"sfixed32_value"+"}", fmt.Sprintf("%v", sfixed32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"sfixed64_value"+"}", fmt.Sprintf("%v", sfixed64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"sint32_value"+"}", fmt.Sprintf("%v", sint32Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"sint64_value"+"}", fmt.Sprintf("%v", sint64Value), -1) - localVarPath = strings.Replace(localVarPath, "{"+"nonConventionalNameValue"+"}", fmt.Sprintf("%v", nonConventionalNameValue), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbABitOfEverything) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Create", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param body - * @return *ExamplepbABitOfEverything - */ -func (a ABitOfEverythingServiceApi) CreateBody(body ExamplepbABitOfEverything) (*ExamplepbABitOfEverything, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(ExamplepbABitOfEverything) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "CreateBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param singleNestedName - * @param body - * @return *ExamplepbABitOfEverything - */ -func (a ABitOfEverythingServiceApi) DeepPathEcho(singleNestedName string, body ExamplepbABitOfEverything) (*ExamplepbABitOfEverything, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{single_nested.name}" - localVarPath = strings.Replace(localVarPath, "{"+"single_nested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(ExamplepbABitOfEverything) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "DeepPathEcho", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param uuid - * @return *ProtobufEmpty - */ -func (a ABitOfEverythingServiceApi) Delete(uuid string) (*ProtobufEmpty, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Delete") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ProtobufEmpty) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Delete", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Echo allows posting a StringMessage value. - * It also exposes multiple bindings. This makes it useful when validating that the OpenAPI v2 API description exposes documentation correctly on all paths defined as additional_bindings in the proto. - * - * @param value - * @return *SubStringMessage - */ -func (a ABitOfEverythingServiceApi) Echo(value string) (*SubStringMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/echo/{value}" - localVarPath = strings.Replace(localVarPath, "{"+"value"+"}", fmt.Sprintf("%v", value), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(SubStringMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Echo allows posting a StringMessage value. - * It also exposes multiple bindings. This makes it useful when validating that the OpenAPI v2 API description exposes documentation correctly on all paths defined as additional_bindings in the proto. - * - * @param body - * @return *SubStringMessage - */ -func (a ABitOfEverythingServiceApi) Echo2(body string) (*SubStringMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/echo" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(SubStringMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo2", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Echo allows posting a StringMessage value. - * It also exposes multiple bindings. This makes it useful when validating that the OpenAPI v2 API description exposes documentation correctly on all paths defined as additional_bindings in the proto. - * - * @param value - * @return *SubStringMessage - */ -func (a ABitOfEverythingServiceApi) Echo3(value string) (*SubStringMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/echo" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("value", a.Configuration.APIClient.ParameterToString(value, "")) - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(SubStringMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo3", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @return *ProtobufEmpty - */ -func (a ABitOfEverythingServiceApi) ErrorWithDetails() (*ProtobufEmpty, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/errorwithdetails" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ProtobufEmpty) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "ErrorWithDetails", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param id - * @param body - * @return *ProtobufEmpty - */ -func (a ABitOfEverythingServiceApi) GetMessageWithBody(id string, body ExamplepbBody) (*ProtobufEmpty, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/withbody/{id}" - localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(ProtobufEmpty) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "GetMessageWithBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param uuid - * @param singleNestedName name is nested field. - * @param singleNestedAmount - * @param singleNestedOk - FALSE: FALSE is false. - TRUE: TRUE is true. - * @param floatValue - * @param doubleValue - * @param int64Value - * @param uint64Value - * @param int32Value - * @param fixed64Value - * @param fixed32Value - * @param boolValue - * @param stringValue - * @param bytesValue - * @param uint32Value - * @param enumValue - ZERO: ZERO means 0 - ONE: ONE means 1 - * @param sfixed32Value - * @param sfixed64Value - * @param sint32Value - * @param sint64Value - * @param repeatedStringValue - * @param oneofString - * @param nonConventionalNameValue - * @param timestampValue - * @param repeatedEnumValue repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 - * @return *ProtobufEmpty - */ -func (a ABitOfEverythingServiceApi) GetQuery(uuid string, singleNestedName string, singleNestedAmount int64, singleNestedOk string, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, bytesValue string, uint32Value int64, enumValue string, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, repeatedStringValue []string, oneofString string, nonConventionalNameValue string, timestampValue time.Time, repeatedEnumValue []string) (*ProtobufEmpty, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/query/{uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - localVarQueryParams.Add("single_nested.name", a.Configuration.APIClient.ParameterToString(singleNestedName, "")) - localVarQueryParams.Add("single_nested.amount", a.Configuration.APIClient.ParameterToString(singleNestedAmount, "")) - localVarQueryParams.Add("single_nested.ok", a.Configuration.APIClient.ParameterToString(singleNestedOk, "")) - localVarQueryParams.Add("float_value", a.Configuration.APIClient.ParameterToString(floatValue, "")) - localVarQueryParams.Add("double_value", a.Configuration.APIClient.ParameterToString(doubleValue, "")) - localVarQueryParams.Add("int64_value", a.Configuration.APIClient.ParameterToString(int64Value, "")) - localVarQueryParams.Add("uint64_value", a.Configuration.APIClient.ParameterToString(uint64Value, "")) - localVarQueryParams.Add("int32_value", a.Configuration.APIClient.ParameterToString(int32Value, "")) - localVarQueryParams.Add("fixed64_value", a.Configuration.APIClient.ParameterToString(fixed64Value, "")) - localVarQueryParams.Add("fixed32_value", a.Configuration.APIClient.ParameterToString(fixed32Value, "")) - localVarQueryParams.Add("bool_value", a.Configuration.APIClient.ParameterToString(boolValue, "")) - localVarQueryParams.Add("string_value", a.Configuration.APIClient.ParameterToString(stringValue, "")) - localVarQueryParams.Add("bytes_value", a.Configuration.APIClient.ParameterToString(bytesValue, "")) - localVarQueryParams.Add("uint32_value", a.Configuration.APIClient.ParameterToString(uint32Value, "")) - localVarQueryParams.Add("enum_value", a.Configuration.APIClient.ParameterToString(enumValue, "")) - localVarQueryParams.Add("sfixed32_value", a.Configuration.APIClient.ParameterToString(sfixed32Value, "")) - localVarQueryParams.Add("sfixed64_value", a.Configuration.APIClient.ParameterToString(sfixed64Value, "")) - localVarQueryParams.Add("sint32_value", a.Configuration.APIClient.ParameterToString(sint32Value, "")) - localVarQueryParams.Add("sint64_value", a.Configuration.APIClient.ParameterToString(sint64Value, "")) - var repeatedStringValueCollectionFormat = "csv" - localVarQueryParams.Add("repeated_string_value", a.Configuration.APIClient.ParameterToString(repeatedStringValue, repeatedStringValueCollectionFormat)) - - localVarQueryParams.Add("oneof_string", a.Configuration.APIClient.ParameterToString(oneofString, "")) - localVarQueryParams.Add("nonConventionalNameValue", a.Configuration.APIClient.ParameterToString(nonConventionalNameValue, "")) - localVarQueryParams.Add("timestamp_value", a.Configuration.APIClient.ParameterToString(timestampValue, "")) - var repeatedEnumValueCollectionFormat = "csv" - localVarQueryParams.Add("repeated_enum_value", a.Configuration.APIClient.ParameterToString(repeatedEnumValue, repeatedEnumValueCollectionFormat)) - - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ProtobufEmpty) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "GetQuery", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param uuid - * @return *ExamplepbABitOfEverything - */ -func (a ABitOfEverythingServiceApi) Lookup(uuid string) (*ExamplepbABitOfEverything, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbABitOfEverything) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Lookup", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param name - * @param body - * @return *ProtobufEmpty - */ -func (a ABitOfEverythingServiceApi) PostWithEmptyBody(name string, body ExamplepbBody) (*ProtobufEmpty, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/postwithemptybody/{name}" - localVarPath = strings.Replace(localVarPath, "{"+"name"+"}", fmt.Sprintf("%v", name), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(ProtobufEmpty) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "PostWithEmptyBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @return *ProtobufEmpty - */ -func (a ABitOfEverythingServiceApi) Timeout() (*ProtobufEmpty, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v2/example/timeout" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ProtobufEmpty) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Timeout", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * - * - * @param uuid - * @param body - * @return *ProtobufEmpty - */ -func (a ABitOfEverythingServiceApi) Update(uuid string, body ExamplepbABitOfEverything) (*ProtobufEmpty, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Put") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/a_bit_of_everything/{uuid}" - localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", "application/x-foo-mime", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - "application/x-foo-mime", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(ProtobufEmpty) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Update", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - diff --git a/examples/clients/abe/api/swagger.yaml b/examples/clients/abe/api/swagger.yaml new file mode 100644 index 00000000000..484d6859e57 --- /dev/null +++ b/examples/clients/abe/api/swagger.yaml @@ -0,0 +1,752 @@ +--- +swagger: "2.0" +info: + version: "1.0" + title: "A Bit of Everything" + contact: + name: "gRPC-Gateway project" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + email: "none@example.com" +schemes: +- "http" +- "https" +- "wss" +consumes: +- "application/json" +- "application/x-foo-mime" +produces: +- "application/json" +- "application/x-foo-mime" +security: +- ApiKeyAuth: [] + BasicAuth: [] +- ApiKeyAuth: [] + OAuth2: + - "read" + - "write" +paths: + /v1/example/a_bit_of_everything: + post: + tags: + - "ABitOfEverythingService" + operationId: "CreateBody" + parameters: + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbABitOfEverything" + x-exportParamName: "Body" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/examplepbABitOfEverything" + /v1/example/a_bit_of_everything/echo/{value}: + get: + tags: + - "echo service" + - "echo rpc" + summary: "Summary: Echo rpc" + description: "Description Echo" + operationId: "Echo" + parameters: + - name: "value" + in: "path" + required: true + type: "string" + x-exportParamName: "Value" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/subStringMessage" + externalDocs: + description: "Find out more Echo" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + /v1/example/a_bit_of_everything/query/{uuid}: + get: + tags: + - "ABitOfEverythingService" + operationId: "GetQuery" + parameters: + - name: "uuid" + in: "path" + required: true + type: "string" + x-exportParamName: "Uuid" + - name: "single_nested.name" + in: "query" + description: "name is nested field." + required: false + type: "string" + x-exportParamName: "SingleNestedName" + - name: "single_nested.amount" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "SingleNestedAmount" + - name: "single_nested.ok" + in: "query" + description: " - FALSE: FALSE is false.\n - TRUE: TRUE is true." + required: false + type: "string" + default: "FALSE" + enum: + - "FALSE" + - "TRUE" + x-exportParamName: "SingleNestedOk" + - name: "floatValue" + in: "query" + required: false + type: "number" + format: "float" + x-exportParamName: "FloatValue" + - name: "doubleValue" + in: "query" + required: false + type: "number" + format: "double" + x-exportParamName: "DoubleValue" + - name: "int64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Int64Value" + - name: "uint64Value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Uint64Value" + - name: "int32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Int32Value" + - name: "fixed64Value" + in: "query" + required: false + type: "string" + format: "uint64" + x-exportParamName: "Fixed64Value" + - name: "fixed32Value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Fixed32Value" + - name: "boolValue" + in: "query" + required: false + type: "boolean" + format: "boolean" + x-exportParamName: "BoolValue" + - name: "stringValue" + in: "query" + required: false + type: "string" + x-exportParamName: "StringValue" + - name: "bytesValue" + in: "query" + required: false + type: "string" + format: "byte" + x-exportParamName: "BytesValue" + - name: "uint32Value" + in: "query" + required: false + type: "integer" + format: "int64" + x-exportParamName: "Uint32Value" + - name: "enumValue" + in: "query" + description: " - ZERO: ZERO means 0\n - ONE: ONE means 1" + required: false + type: "string" + default: "ZERO" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "EnumValue" + - name: "sfixed32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sfixed32Value" + - name: "sfixed64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sfixed64Value" + - name: "sint32Value" + in: "query" + required: false + type: "integer" + format: "int32" + x-exportParamName: "Sint32Value" + - name: "sint64Value" + in: "query" + required: false + type: "string" + format: "int64" + x-exportParamName: "Sint64Value" + - name: "repeatedStringValue" + in: "query" + required: false + type: "array" + items: + type: "string" + x-exportParamName: "RepeatedStringValue" + - name: "oneofString" + in: "query" + required: false + type: "string" + x-exportParamName: "OneofString" + - name: "nonConventionalNameValue" + in: "query" + required: false + type: "string" + x-exportParamName: "NonConventionalNameValue" + - name: "timestampValue" + in: "query" + required: false + type: "string" + format: "date-time" + x-exportParamName: "TimestampValue" + - name: "repeatedEnumValue" + in: "query" + description: "repeated enum value. it is comma-separated in query.\n\n - ZERO:\ + \ ZERO means 0\n - ONE: ONE means 1" + required: false + type: "array" + items: + type: "string" + enum: + - "ZERO" + - "ONE" + x-exportParamName: "RepeatedEnumValue" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/protobufEmpty" + externalDocs: + description: "Find out more about GetQuery" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + deprecated: true + ? /v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue} + : post: + tags: + - "ABitOfEverythingService" + operationId: "Create" + parameters: + - name: "float_value" + in: "path" + required: true + type: "number" + format: "float" + x-exportParamName: "FloatValue" + - name: "double_value" + in: "path" + required: true + type: "number" + format: "double" + x-exportParamName: "DoubleValue" + - name: "int64_value" + in: "path" + required: true + type: "string" + format: "int64" + x-exportParamName: "Int64Value" + - name: "uint64_value" + in: "path" + required: true + type: "string" + format: "uint64" + x-exportParamName: "Uint64Value" + - name: "int32_value" + in: "path" + required: true + type: "integer" + format: "int32" + x-exportParamName: "Int32Value" + - name: "fixed64_value" + in: "path" + required: true + type: "string" + format: "uint64" + x-exportParamName: "Fixed64Value" + - name: "fixed32_value" + in: "path" + required: true + type: "integer" + format: "int64" + x-exportParamName: "Fixed32Value" + - name: "bool_value" + in: "path" + required: true + type: "boolean" + format: "boolean" + x-exportParamName: "BoolValue" + - name: "string_value" + in: "path" + required: true + type: "string" + x-exportParamName: "StringValue" + - name: "uint32_value" + in: "path" + required: true + type: "integer" + format: "int64" + x-exportParamName: "Uint32Value" + - name: "sfixed32_value" + in: "path" + required: true + type: "integer" + format: "int32" + x-exportParamName: "Sfixed32Value" + - name: "sfixed64_value" + in: "path" + required: true + type: "string" + format: "int64" + x-exportParamName: "Sfixed64Value" + - name: "sint32_value" + in: "path" + required: true + type: "integer" + format: "int32" + x-exportParamName: "Sint32Value" + - name: "sint64_value" + in: "path" + required: true + type: "string" + format: "int64" + x-exportParamName: "Sint64Value" + - name: "nonConventionalNameValue" + in: "path" + required: true + type: "string" + x-exportParamName: "NonConventionalNameValue" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/examplepbABitOfEverything" + /v1/example/a_bit_of_everything/{single_nested.name}: + post: + tags: + - "ABitOfEverythingService" + operationId: "DeepPathEcho" + parameters: + - name: "single_nested.name" + in: "path" + required: true + type: "string" + x-exportParamName: "SingleNestedName" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbABitOfEverything" + x-exportParamName: "Body" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/examplepbABitOfEverything" + /v1/example/a_bit_of_everything/{uuid}: + get: + tags: + - "ABitOfEverythingService" + operationId: "Lookup" + parameters: + - name: "uuid" + in: "path" + required: true + type: "string" + x-exportParamName: "Uuid" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/examplepbABitOfEverything" + put: + tags: + - "ABitOfEverythingService" + operationId: "Update" + parameters: + - name: "uuid" + in: "path" + required: true + type: "string" + x-exportParamName: "Uuid" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbABitOfEverything" + x-exportParamName: "Body" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/protobufEmpty" + delete: + tags: + - "ABitOfEverythingService" + operationId: "Delete" + parameters: + - name: "uuid" + in: "path" + required: true + type: "string" + x-exportParamName: "Uuid" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/protobufEmpty" + security: + - ApiKeyAuth: [] + OAuth2: + - "read" + - "write" + /v2/example/echo: + get: + tags: + - "echo service" + - "echo rpc" + summary: "Summary: Echo rpc" + description: "Description Echo" + operationId: "Echo3" + parameters: + - name: "value" + in: "query" + required: false + type: "string" + x-exportParamName: "Value" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/subStringMessage" + externalDocs: + description: "Find out more Echo" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + post: + tags: + - "echo service" + - "echo rpc" + summary: "Summary: Echo rpc" + description: "Description Echo" + operationId: "Echo2" + parameters: + - in: "body" + name: "body" + required: true + schema: + type: "string" + x-exportParamName: "Body" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/subStringMessage" + externalDocs: + description: "Find out more Echo" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + /v2/example/empty: + get: + tags: + - "camelCaseServiceName" + operationId: "Empty" + parameters: [] + responses: + 200: + description: "" + schema: + $ref: "#/definitions/protobufEmpty" + /v2/example/errorwithdetails: + get: + tags: + - "ABitOfEverythingService" + operationId: "ErrorWithDetails" + parameters: [] + responses: + 200: + description: "" + schema: + $ref: "#/definitions/protobufEmpty" + /v2/example/postwithemptybody/{name}: + post: + tags: + - "ABitOfEverythingService" + operationId: "PostWithEmptyBody" + parameters: + - name: "name" + in: "path" + required: true + type: "string" + x-exportParamName: "Name" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbBody" + x-exportParamName: "Body" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/protobufEmpty" + /v2/example/timeout: + get: + tags: + - "ABitOfEverythingService" + operationId: "Timeout" + parameters: [] + responses: + 200: + description: "" + schema: + $ref: "#/definitions/protobufEmpty" + /v2/example/withbody/{id}: + post: + tags: + - "ABitOfEverythingService" + operationId: "GetMessageWithBody" + parameters: + - name: "id" + in: "path" + required: true + type: "string" + x-exportParamName: "Id" + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbBody" + x-exportParamName: "Body" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/protobufEmpty" +securityDefinitions: + ApiKeyAuth: + type: "apiKey" + name: "X-API-Key" + in: "header" + BasicAuth: + type: "basic" + OAuth2: + type: "oauth2" + authorizationUrl: "https://example.com/oauth/authorize" + tokenUrl: "https://example.com/oauth/token" + flow: "accessCode" + scopes: + admin: "Grants read and write access to administrative information" + read: "Grants read access" + write: "Grants write access" +definitions: + ABitOfEverythingNested: + type: "object" + properties: + name: + type: "string" + description: "name is nested field." + amount: + type: "integer" + format: "int64" + ok: + $ref: "#/definitions/NestedDeepEnum" + description: "Nested is nested type." + example: + amount: 0 + name: "name" + ok: {} + NestedDeepEnum: + type: "string" + description: "DeepEnum is one or zero.\n\n - FALSE: FALSE is false.\n - TRUE:\ + \ TRUE is true." + enum: + - "FALSE" + - "TRUE" + default: "FALSE" + examplepbABitOfEverything: + type: "object" + properties: + singleNested: + $ref: "#/definitions/ABitOfEverythingNested" + uuid: + type: "string" + nested: + type: "array" + items: + $ref: "#/definitions/ABitOfEverythingNested" + floatValue: + type: "number" + format: "float" + doubleValue: + type: "number" + format: "double" + int64Value: + type: "string" + format: "int64" + uint64Value: + type: "string" + format: "uint64" + int32Value: + type: "integer" + format: "int32" + fixed64Value: + type: "string" + format: "uint64" + fixed32Value: + type: "integer" + format: "int64" + boolValue: + type: "boolean" + format: "boolean" + stringValue: + type: "string" + bytesValue: + type: "string" + format: "byte" + pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" + uint32Value: + type: "integer" + format: "int64" + enumValue: + $ref: "#/definitions/examplepbNumericEnum" + sfixed32Value: + type: "integer" + format: "int32" + sfixed64Value: + type: "string" + format: "int64" + sint32Value: + type: "integer" + format: "int32" + sint64Value: + type: "string" + format: "int64" + repeatedStringValue: + type: "array" + items: + type: "string" + oneofEmpty: + $ref: "#/definitions/protobufEmpty" + oneofString: + type: "string" + mapValue: + type: "object" + additionalProperties: + $ref: "#/definitions/examplepbNumericEnum" + mappedStringValue: + type: "object" + additionalProperties: + type: "string" + mappedNestedValue: + type: "object" + additionalProperties: + $ref: "#/definitions/ABitOfEverythingNested" + nonConventionalNameValue: + type: "string" + timestampValue: + type: "string" + format: "date-time" + repeatedEnumValue: + type: "array" + title: "repeated enum value. it is comma-separated in query" + items: + $ref: "#/definitions/examplepbNumericEnum" + externalDocs: + description: "Find out more about ABitOfEverything" + url: "https://github.com/grpc-ecosystem/grpc-gateway" + title: "Intentionaly complicated message type to cover much features of Protobuf.\n\ + NEXT ID: 30" + example: + mappedNestedValue: + key: + amount: 0 + name: "name" + ok: {} + int64Value: "int64Value" + nonConventionalNameValue: "nonConventionalNameValue" + repeatedEnumValue: + - null + - null + timestampValue: "2000-01-23T04:56:07.000+00:00" + uuid: "uuid" + nested: + - amount: 0 + name: "name" + ok: {} + - amount: 0 + name: "name" + ok: {} + fixed32Value: 5 + mapValue: {} + stringValue: "stringValue" + sint32Value: 9 + enumValue: {} + uint32Value: 2 + sfixed64Value: "sfixed64Value" + repeatedStringValue: + - "repeatedStringValue" + - "repeatedStringValue" + oneofEmpty: {} + floatValue: 6.0274563 + int32Value: 5 + doubleValue: 1.4658129805029452 + uint64Value: "uint64Value" + fixed64Value: "fixed64Value" + sint64Value: "sint64Value" + singleNested: + amount: 0 + name: "name" + ok: {} + boolValue: true + bytesValue: "bytesValue" + sfixed32Value: 7 + mappedStringValue: + key: "mappedStringValue" + oneofString: "oneofString" + examplepbBody: + type: "object" + properties: + name: + type: "string" + examplepbNumericEnum: + type: "string" + description: "NumericEnum is one or zero.\n\n - ZERO: ZERO means 0\n - ONE: ONE\ + \ means 1" + enum: + - "ZERO" + - "ONE" + default: "ZERO" + protobufEmpty: + type: "object" + title: "A generic empty message that you can re-use to avoid defining duplicated\n\ + empty messages in your APIs. A typical example is to use it as the request\n\ + or the response type of an API method. For instance:" + description: "service Foo {\n rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n\ + \ }\n\nThe JSON representation for `Empty` is empty JSON object `{}`." + subStringMessage: + type: "object" + properties: + value: + type: "string" + example: + value: "value" +externalDocs: + description: "More about gRPC-Gateway" + url: "https://github.com/grpc-ecosystem/grpc-gateway" diff --git a/examples/clients/abe/api_a_bit_of_everything_service.go b/examples/clients/abe/api_a_bit_of_everything_service.go new file mode 100644 index 00000000000..72a16af9611 --- /dev/null +++ b/examples/clients/abe/api_a_bit_of_everything_service.go @@ -0,0 +1,1021 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "io/ioutil" + "net/http" + "net/url" + "strings" + "golang.org/x/net/context" + "time" + "encoding/json" + "fmt" +) + +// Linger please +var ( + _ context.Context +) + +type ABitOfEverythingServiceApiService service + +/* ABitOfEverythingServiceApiService + * @param ctx context.Context for authentication, logging, tracing, etc. +@param floatValue +@param doubleValue +@param int64Value +@param uint64Value +@param int32Value +@param fixed64Value +@param fixed32Value +@param boolValue +@param stringValue +@param uint32Value +@param sfixed32Value +@param sfixed64Value +@param sint32Value +@param sint64Value +@param nonConventionalNameValue +@return ExamplepbABitOfEverything*/ +func (a *ABitOfEverythingServiceApiService) Create(ctx context.Context, floatValue float32, doubleValue float64, int64Value string, uint64Value string, int32Value int32, fixed64Value string, fixed32Value int64, boolValue bool, stringValue string, uint32Value int64, sfixed32Value int32, sfixed64Value string, sint32Value int32, sint64Value string, nonConventionalNameValue string) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{float_value}/{double_value}/{int64_value}/separator/{uint64_value}/{int32_value}/{fixed64_value}/{fixed32_value}/{bool_value}/{string_value}/{uint32_value}/{sfixed32_value}/{sfixed64_value}/{sint32_value}/{sint64_value}/{nonConventionalNameValue}" + localVarPath = strings.Replace(localVarPath, "{"+"float_value"+"}", fmt.Sprintf("%v", floatValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"double_value"+"}", fmt.Sprintf("%v", doubleValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"int64_value"+"}", fmt.Sprintf("%v", int64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"uint64_value"+"}", fmt.Sprintf("%v", uint64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"int32_value"+"}", fmt.Sprintf("%v", int32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"fixed64_value"+"}", fmt.Sprintf("%v", fixed64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"fixed32_value"+"}", fmt.Sprintf("%v", fixed32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"bool_value"+"}", fmt.Sprintf("%v", boolValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"string_value"+"}", fmt.Sprintf("%v", stringValue), -1) + localVarPath = strings.Replace(localVarPath, "{"+"uint32_value"+"}", fmt.Sprintf("%v", uint32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"sfixed32_value"+"}", fmt.Sprintf("%v", sfixed32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"sfixed64_value"+"}", fmt.Sprintf("%v", sfixed64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"sint32_value"+"}", fmt.Sprintf("%v", sint32Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"sint64_value"+"}", fmt.Sprintf("%v", sint64Value), -1) + localVarPath = strings.Replace(localVarPath, "{"+"nonConventionalNameValue"+"}", fmt.Sprintf("%v", nonConventionalNameValue), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* ABitOfEverythingServiceApiService + * @param ctx context.Context for authentication, logging, tracing, etc. +@param body +@return ExamplepbABitOfEverything*/ +func (a *ABitOfEverythingServiceApiService) CreateBody(ctx context.Context, body ExamplepbABitOfEverything) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* ABitOfEverythingServiceApiService + * @param ctx context.Context for authentication, logging, tracing, etc. +@param singleNestedName +@param body +@return ExamplepbABitOfEverything*/ +func (a *ABitOfEverythingServiceApiService) DeepPathEcho(ctx context.Context, singleNestedName string, body ExamplepbABitOfEverything) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{single_nested.name}" + localVarPath = strings.Replace(localVarPath, "{"+"single_nested.name"+"}", fmt.Sprintf("%v", singleNestedName), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* ABitOfEverythingServiceApiService + * @param ctx context.Context for authentication, logging, tracing, etc. +@param uuid +@return ProtobufEmpty*/ +func (a *ABitOfEverythingServiceApiService) Delete(ctx context.Context, uuid string) (ProtobufEmpty, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Delete") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ProtobufEmpty + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* ABitOfEverythingServiceApiService + * @param ctx context.Context for authentication, logging, tracing, etc. +@return ProtobufEmpty*/ +func (a *ABitOfEverythingServiceApiService) ErrorWithDetails(ctx context.Context) (ProtobufEmpty, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ProtobufEmpty + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/errorwithdetails" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* ABitOfEverythingServiceApiService + * @param ctx context.Context for authentication, logging, tracing, etc. +@param id +@param body +@return ProtobufEmpty*/ +func (a *ABitOfEverythingServiceApiService) GetMessageWithBody(ctx context.Context, id string, body ExamplepbBody) (ProtobufEmpty, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ProtobufEmpty + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/withbody/{id}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* ABitOfEverythingServiceApiService + * @param ctx context.Context for authentication, logging, tracing, etc. +@param uuid +@param optional (nil or map[string]interface{}) with one or more of: + @param "singleNestedName" (string) name is nested field. + @param "singleNestedAmount" (int64) + @param "singleNestedOk" (string) - FALSE: FALSE is false. - TRUE: TRUE is true. + @param "floatValue" (float32) + @param "doubleValue" (float64) + @param "int64Value" (string) + @param "uint64Value" (string) + @param "int32Value" (int32) + @param "fixed64Value" (string) + @param "fixed32Value" (int64) + @param "boolValue" (bool) + @param "stringValue" (string) + @param "bytesValue" (string) + @param "uint32Value" (int64) + @param "enumValue" (string) - ZERO: ZERO means 0 - ONE: ONE means 1 + @param "sfixed32Value" (int32) + @param "sfixed64Value" (string) + @param "sint32Value" (int32) + @param "sint64Value" (string) + @param "repeatedStringValue" ([]string) + @param "oneofString" (string) + @param "nonConventionalNameValue" (string) + @param "timestampValue" (time.Time) + @param "repeatedEnumValue" ([]string) repeated enum value. it is comma-separated in query. - ZERO: ZERO means 0 - ONE: ONE means 1 +@return ProtobufEmpty*/ +func (a *ABitOfEverythingServiceApiService) GetQuery(ctx context.Context, uuid string, localVarOptionals map[string]interface{}) (ProtobufEmpty, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ProtobufEmpty + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/query/{uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + if err := typeCheckParameter(localVarOptionals["singleNestedName"], "string", "singleNestedName"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["singleNestedAmount"], "int64", "singleNestedAmount"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["singleNestedOk"], "string", "singleNestedOk"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["floatValue"], "float32", "floatValue"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["doubleValue"], "float64", "doubleValue"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["int64Value"], "string", "int64Value"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["uint64Value"], "string", "uint64Value"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["int32Value"], "int32", "int32Value"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["fixed64Value"], "string", "fixed64Value"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["fixed32Value"], "int64", "fixed32Value"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["boolValue"], "bool", "boolValue"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["stringValue"], "string", "stringValue"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["bytesValue"], "string", "bytesValue"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["uint32Value"], "int64", "uint32Value"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["enumValue"], "string", "enumValue"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["sfixed32Value"], "int32", "sfixed32Value"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["sfixed64Value"], "string", "sfixed64Value"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["sint32Value"], "int32", "sint32Value"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["sint64Value"], "string", "sint64Value"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["oneofString"], "string", "oneofString"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["nonConventionalNameValue"], "string", "nonConventionalNameValue"); err != nil { + return successPayload, nil, err + } + if err := typeCheckParameter(localVarOptionals["timestampValue"], "time.Time", "timestampValue"); err != nil { + return successPayload, nil, err + } + + if localVarTempParam, localVarOk := localVarOptionals["singleNestedName"].(string); localVarOk { + localVarQueryParams.Add("single_nested.name", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["singleNestedAmount"].(int64); localVarOk { + localVarQueryParams.Add("single_nested.amount", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["singleNestedOk"].(string); localVarOk { + localVarQueryParams.Add("single_nested.ok", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["floatValue"].(float32); localVarOk { + localVarQueryParams.Add("floatValue", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["doubleValue"].(float64); localVarOk { + localVarQueryParams.Add("doubleValue", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["int64Value"].(string); localVarOk { + localVarQueryParams.Add("int64Value", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["uint64Value"].(string); localVarOk { + localVarQueryParams.Add("uint64Value", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["int32Value"].(int32); localVarOk { + localVarQueryParams.Add("int32Value", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["fixed64Value"].(string); localVarOk { + localVarQueryParams.Add("fixed64Value", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["fixed32Value"].(int64); localVarOk { + localVarQueryParams.Add("fixed32Value", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["boolValue"].(bool); localVarOk { + localVarQueryParams.Add("boolValue", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["stringValue"].(string); localVarOk { + localVarQueryParams.Add("stringValue", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["bytesValue"].(string); localVarOk { + localVarQueryParams.Add("bytesValue", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["uint32Value"].(int64); localVarOk { + localVarQueryParams.Add("uint32Value", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["enumValue"].(string); localVarOk { + localVarQueryParams.Add("enumValue", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["sfixed32Value"].(int32); localVarOk { + localVarQueryParams.Add("sfixed32Value", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["sfixed64Value"].(string); localVarOk { + localVarQueryParams.Add("sfixed64Value", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["sint32Value"].(int32); localVarOk { + localVarQueryParams.Add("sint32Value", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["sint64Value"].(string); localVarOk { + localVarQueryParams.Add("sint64Value", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["repeatedStringValue"].([]string); localVarOk { + localVarQueryParams.Add("repeatedStringValue", parameterToString(localVarTempParam, "csv")) + } + if localVarTempParam, localVarOk := localVarOptionals["oneofString"].(string); localVarOk { + localVarQueryParams.Add("oneofString", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["nonConventionalNameValue"].(string); localVarOk { + localVarQueryParams.Add("nonConventionalNameValue", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["timestampValue"].(time.Time); localVarOk { + localVarQueryParams.Add("timestampValue", parameterToString(localVarTempParam, "")) + } + if localVarTempParam, localVarOk := localVarOptionals["repeatedEnumValue"].([]string); localVarOk { + localVarQueryParams.Add("repeatedEnumValue", parameterToString(localVarTempParam, "csv")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* ABitOfEverythingServiceApiService + * @param ctx context.Context for authentication, logging, tracing, etc. +@param uuid +@return ExamplepbABitOfEverything*/ +func (a *ABitOfEverythingServiceApiService) Lookup(ctx context.Context, uuid string) (ExamplepbABitOfEverything, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ExamplepbABitOfEverything + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* ABitOfEverythingServiceApiService + * @param ctx context.Context for authentication, logging, tracing, etc. +@param name +@param body +@return ProtobufEmpty*/ +func (a *ABitOfEverythingServiceApiService) PostWithEmptyBody(ctx context.Context, name string, body ExamplepbBody) (ProtobufEmpty, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ProtobufEmpty + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/postwithemptybody/{name}" + localVarPath = strings.Replace(localVarPath, "{"+"name"+"}", fmt.Sprintf("%v", name), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* ABitOfEverythingServiceApiService + * @param ctx context.Context for authentication, logging, tracing, etc. +@return ProtobufEmpty*/ +func (a *ABitOfEverythingServiceApiService) Timeout(ctx context.Context) (ProtobufEmpty, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ProtobufEmpty + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/timeout" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* ABitOfEverythingServiceApiService + * @param ctx context.Context for authentication, logging, tracing, etc. +@param uuid +@param body +@return ProtobufEmpty*/ +func (a *ABitOfEverythingServiceApiService) Update(ctx context.Context, uuid string, body ExamplepbABitOfEverything) (ProtobufEmpty, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Put") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ProtobufEmpty + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/{uuid}" + localVarPath = strings.Replace(localVarPath, "{"+"uuid"+"}", fmt.Sprintf("%v", uuid), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} diff --git a/examples/clients/abe/api_camel_case_service_name.go b/examples/clients/abe/api_camel_case_service_name.go new file mode 100644 index 00000000000..c9297e1a7f9 --- /dev/null +++ b/examples/clients/abe/api_camel_case_service_name.go @@ -0,0 +1,97 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "io/ioutil" + "net/http" + "net/url" + "strings" + "golang.org/x/net/context" + "encoding/json" +) + +// Linger please +var ( + _ context.Context +) + +type CamelCaseServiceNameApiService service + +/* CamelCaseServiceNameApiService + * @param ctx context.Context for authentication, logging, tracing, etc. +@return ProtobufEmpty*/ +func (a *CamelCaseServiceNameApiService) Empty(ctx context.Context) (ProtobufEmpty, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ProtobufEmpty + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/empty" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} diff --git a/examples/clients/abe/api_client.go b/examples/clients/abe/api_client.go deleted file mode 100644 index bf3e21a9fb1..00000000000 --- a/examples/clients/abe/api_client.go +++ /dev/null @@ -1,164 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -import ( - "bytes" - "fmt" - "path/filepath" - "reflect" - "strings" - "net/url" - "io/ioutil" - "github.com/go-resty/resty" -) - -type APIClient struct { - config *Configuration -} - -func (c *APIClient) SelectHeaderContentType(contentTypes []string) string { - - if len(contentTypes) == 0 { - return "" - } - if contains(contentTypes, "application/json") { - return "application/json" - } - return contentTypes[0] // use the first content type specified in 'consumes' -} - -func (c *APIClient) SelectHeaderAccept(accepts []string) string { - - if len(accepts) == 0 { - return "" - } - if contains(accepts, "application/json") { - return "application/json" - } - return strings.Join(accepts, ",") -} - -func contains(haystack []string, needle string) bool { - for _, a := range haystack { - if strings.ToLower(a) == strings.ToLower(needle) { - return true - } - } - return false -} - -func (c *APIClient) CallAPI(path string, method string, - postBody interface{}, - headerParams map[string]string, - queryParams url.Values, - formParams map[string]string, - fileName string, - fileBytes []byte) (*resty.Response, error) { - - rClient := c.prepareClient() - request := c.prepareRequest(rClient, postBody, headerParams, queryParams, formParams, fileName, fileBytes) - - switch strings.ToUpper(method) { - case "GET": - response, err := request.Get(path) - return response, err - case "POST": - response, err := request.Post(path) - return response, err - case "PUT": - response, err := request.Put(path) - return response, err - case "PATCH": - response, err := request.Patch(path) - return response, err - case "DELETE": - response, err := request.Delete(path) - return response, err - } - - return nil, fmt.Errorf("invalid method %v", method) -} - -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) -} - -func (c *APIClient) prepareClient() *resty.Client { - - rClient := resty.New() - - rClient.SetDebug(c.config.Debug) - if c.config.Transport != nil { - rClient.SetTransport(c.config.Transport) - } - - if c.config.Timeout != nil { - rClient.SetTimeout(*c.config.Timeout) - } - rClient.SetLogger(ioutil.Discard) - return rClient -} - -func (c *APIClient) prepareRequest( - rClient *resty.Client, - postBody interface{}, - headerParams map[string]string, - queryParams url.Values, - formParams map[string]string, - fileName string, - fileBytes []byte) *resty.Request { - - - request := rClient.R() - request.SetBody(postBody) - - if c.config.UserAgent != "" { - request.SetHeader("User-Agent", c.config.UserAgent) - } - - // add header parameter, if any - if len(headerParams) > 0 { - request.SetHeaders(headerParams) - } - - // add query parameter, if any - if len(queryParams) > 0 { - request.SetMultiValueQueryParams(queryParams) - } - - // add form parameter, if any - if len(formParams) > 0 { - request.SetFormData(formParams) - } - - if len(fileBytes) > 0 && fileName != "" { - _, fileNm := filepath.Split(fileName) - request.SetFileReader("file", fileNm, bytes.NewReader(fileBytes)) - } - return request -} diff --git a/examples/clients/abe/api_echo_rpc.go b/examples/clients/abe/api_echo_rpc.go new file mode 100644 index 00000000000..ce16a0826e8 --- /dev/null +++ b/examples/clients/abe/api_echo_rpc.go @@ -0,0 +1,254 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "io/ioutil" + "net/http" + "net/url" + "strings" + "golang.org/x/net/context" + "encoding/json" + "fmt" +) + +// Linger please +var ( + _ context.Context +) + +type EchoRpcApiService service + +/* EchoRpcApiService Summary: Echo rpc +Description Echo + * @param ctx context.Context for authentication, logging, tracing, etc. +@param value +@return SubStringMessage*/ +func (a *EchoRpcApiService) Echo(ctx context.Context, value string) (SubStringMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload SubStringMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/echo/{value}" + localVarPath = strings.Replace(localVarPath, "{"+"value"+"}", fmt.Sprintf("%v", value), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* EchoRpcApiService Summary: Echo rpc +Description Echo + * @param ctx context.Context for authentication, logging, tracing, etc. +@param body +@return SubStringMessage*/ +func (a *EchoRpcApiService) Echo2(ctx context.Context, body string) (SubStringMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload SubStringMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/echo" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* EchoRpcApiService Summary: Echo rpc +Description Echo + * @param ctx context.Context for authentication, logging, tracing, etc. +@param optional (nil or map[string]interface{}) with one or more of: + @param "value" (string) +@return SubStringMessage*/ +func (a *EchoRpcApiService) Echo3(ctx context.Context, localVarOptionals map[string]interface{}) (SubStringMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload SubStringMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/echo" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + if err := typeCheckParameter(localVarOptionals["value"], "string", "value"); err != nil { + return successPayload, nil, err + } + + if localVarTempParam, localVarOk := localVarOptionals["value"].(string); localVarOk { + localVarQueryParams.Add("value", parameterToString(localVarTempParam, "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} diff --git a/examples/clients/abe/api_echo_service.go b/examples/clients/abe/api_echo_service.go new file mode 100644 index 00000000000..0dd3a8e4a02 --- /dev/null +++ b/examples/clients/abe/api_echo_service.go @@ -0,0 +1,254 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "io/ioutil" + "net/http" + "net/url" + "strings" + "golang.org/x/net/context" + "encoding/json" + "fmt" +) + +// Linger please +var ( + _ context.Context +) + +type EchoServiceApiService service + +/* EchoServiceApiService Summary: Echo rpc +Description Echo + * @param ctx context.Context for authentication, logging, tracing, etc. +@param value +@return SubStringMessage*/ +func (a *EchoServiceApiService) Echo(ctx context.Context, value string) (SubStringMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload SubStringMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/a_bit_of_everything/echo/{value}" + localVarPath = strings.Replace(localVarPath, "{"+"value"+"}", fmt.Sprintf("%v", value), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* EchoServiceApiService Summary: Echo rpc +Description Echo + * @param ctx context.Context for authentication, logging, tracing, etc. +@param body +@return SubStringMessage*/ +func (a *EchoServiceApiService) Echo2(ctx context.Context, body string) (SubStringMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload SubStringMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/echo" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* EchoServiceApiService Summary: Echo rpc +Description Echo + * @param ctx context.Context for authentication, logging, tracing, etc. +@param optional (nil or map[string]interface{}) with one or more of: + @param "value" (string) +@return SubStringMessage*/ +func (a *EchoServiceApiService) Echo3(ctx context.Context, localVarOptionals map[string]interface{}) (SubStringMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload SubStringMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v2/example/echo" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + if err := typeCheckParameter(localVarOptionals["value"], "string", "value"); err != nil { + return successPayload, nil, err + } + + if localVarTempParam, localVarOk := localVarOptionals["value"].(string); localVarOk { + localVarQueryParams.Add("value", parameterToString(localVarTempParam, "")) + } + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json", "application/x-foo-mime"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json", "application/x-foo-mime"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + if ctx != nil { + // API Key Authentication + if auth, ok := ctx.Value(ContextAPIKey).(APIKey); ok { + var key string + if auth.Prefix != "" { + key = auth.Prefix + " " + auth.Key + } else { + key = auth.Key + } + localVarHeaderParams["X-API-Key"] = key + } + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} diff --git a/examples/clients/abe/client.go b/examples/clients/abe/client.go new file mode 100644 index 00000000000..368abe5264e --- /dev/null +++ b/examples/clients/abe/client.go @@ -0,0 +1,435 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "bytes" + "encoding/json" + "encoding/xml" + "errors" + "fmt" + "io" + "mime/multipart" + "net/http" + "net/url" + "os" + "path/filepath" + "reflect" + "regexp" + "strconv" + "strings" + "time" + "unicode/utf8" + + "golang.org/x/net/context" + "golang.org/x/oauth2" +) + +var ( + jsonCheck = regexp.MustCompile("(?i:[application|text]/json)") + xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)") +) + +// APIClient manages communication with the A Bit of Everything API v1.0 +// In most cases there should be only one, shared, APIClient. +type APIClient struct { + cfg *Configuration + common service // Reuse a single struct instead of allocating one for each service on the heap. + + // API Services + + ABitOfEverythingServiceApi *ABitOfEverythingServiceApiService + + CamelCaseServiceNameApi *CamelCaseServiceNameApiService + + EchoRpcApi *EchoRpcApiService + + EchoServiceApi *EchoServiceApiService +} + +type service struct { + client *APIClient +} + +// NewAPIClient creates a new API client. Requires a userAgent string describing your application. +// optionally a custom http.Client to allow for advanced features such as caching. +func NewAPIClient(cfg *Configuration) *APIClient { + if cfg.HTTPClient == nil { + cfg.HTTPClient = http.DefaultClient + } + + c := &APIClient{} + c.cfg = cfg + c.common.client = c + + // API Services + c.ABitOfEverythingServiceApi = (*ABitOfEverythingServiceApiService)(&c.common) + c.CamelCaseServiceNameApi = (*CamelCaseServiceNameApiService)(&c.common) + c.EchoRpcApi = (*EchoRpcApiService)(&c.common) + c.EchoServiceApi = (*EchoServiceApiService)(&c.common) + + return c +} + +func atoi(in string) (int, error) { + return strconv.Atoi(in) +} + +// selectHeaderContentType select a content type from the available list. +func selectHeaderContentType(contentTypes []string) string { + if len(contentTypes) == 0 { + return "" + } + if contains(contentTypes, "application/json") { + return "application/json" + } + return contentTypes[0] // use the first content type specified in 'consumes' +} + +// selectHeaderAccept join all accept types and return +func selectHeaderAccept(accepts []string) string { + if len(accepts) == 0 { + return "" + } + + if contains(accepts, "application/json") { + return "application/json" + } + + return strings.Join(accepts, ",") +} + +// contains is a case insenstive match, finding needle in a haystack +func contains(haystack []string, needle string) bool { + for _, a := range haystack { + if strings.ToLower(a) == strings.ToLower(needle) { + return true + } + } + return false +} + +// Verify optional parameters are of the correct type. +func typeCheckParameter(obj interface{}, expected string, name string) error { + // Make sure there is an object. + if obj == nil { + return nil + } + + // Check the type is as expected. + if reflect.TypeOf(obj).String() != expected { + return fmt.Errorf("Expected %s to be of type %s but received %s.", name, expected, reflect.TypeOf(obj).String()) + } + return nil +} + +// parameterToString convert interface{} parameters to string, using a delimiter if format is provided. +func parameterToString(obj interface{}, collectionFormat string) string { + var delimiter string + + 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) +} + +// callAPI do the request. +func (c *APIClient) callAPI(request *http.Request) (*http.Response, error) { + return c.cfg.HTTPClient.Do(request) +} + +// Change base path to allow switching to mocks +func (c *APIClient) ChangeBasePath(path string) { + c.cfg.BasePath = path +} + +// prepareRequest build the request +func (c *APIClient) prepareRequest( + ctx context.Context, + path string, method string, + postBody interface{}, + headerParams map[string]string, + queryParams url.Values, + formParams url.Values, + fileName string, + fileBytes []byte) (localVarRequest *http.Request, err error) { + + var body *bytes.Buffer + + // Detect postBody type and post. + if postBody != nil { + contentType := headerParams["Content-Type"] + if contentType == "" { + contentType = detectContentType(postBody) + headerParams["Content-Type"] = contentType + } + + body, err = setBody(postBody, contentType) + if err != nil { + return nil, err + } + } + + // add form parameters and file if available. + if len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") { + if body != nil { + return nil, errors.New("Cannot specify postBody and multipart form at the same time.") + } + body = &bytes.Buffer{} + w := multipart.NewWriter(body) + + for k, v := range formParams { + for _, iv := range v { + if strings.HasPrefix(k, "@") { // file + err = addFile(w, k[1:], iv) + if err != nil { + return nil, err + } + } else { // form value + w.WriteField(k, iv) + } + } + } + if len(fileBytes) > 0 && fileName != "" { + w.Boundary() + //_, fileNm := filepath.Split(fileName) + part, err := w.CreateFormFile("file", filepath.Base(fileName)) + if err != nil { + return nil, err + } + _, err = part.Write(fileBytes) + if err != nil { + return nil, err + } + // Set the Boundary in the Content-Type + headerParams["Content-Type"] = w.FormDataContentType() + } + + // Set Content-Length + headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len()) + w.Close() + } + + // Setup path and query parameters + url, err := url.Parse(path) + if err != nil { + return nil, err + } + + // Adding Query Param + query := url.Query() + for k, v := range queryParams { + for _, iv := range v { + query.Add(k, iv) + } + } + + // Encode the parameters. + url.RawQuery = query.Encode() + + // Generate a new request + if body != nil { + localVarRequest, err = http.NewRequest(method, url.String(), body) + } else { + localVarRequest, err = http.NewRequest(method, url.String(), nil) + } + if err != nil { + return nil, err + } + + // add header parameters, if any + if len(headerParams) > 0 { + headers := http.Header{} + for h, v := range headerParams { + headers.Set(h, v) + } + localVarRequest.Header = headers + } + + // Override request host, if applicable + if c.cfg.Host != "" { + localVarRequest.Host = c.cfg.Host + } + + // Add the user agent to the request. + localVarRequest.Header.Add("User-Agent", c.cfg.UserAgent) + + if ctx != nil { + // add context to the request + localVarRequest = localVarRequest.WithContext(ctx) + + // Walk through any authentication. + + // OAuth2 authentication + if tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok { + // We were able to grab an oauth2 token from the context + var latestToken *oauth2.Token + if latestToken, err = tok.Token(); err != nil { + return nil, err + } + + latestToken.SetAuthHeader(localVarRequest) + } + + // Basic HTTP Authentication + if auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok { + localVarRequest.SetBasicAuth(auth.UserName, auth.Password) + } + + // AccessToken Authentication + if auth, ok := ctx.Value(ContextAccessToken).(string); ok { + localVarRequest.Header.Add("Authorization", "Bearer "+auth) + } + } + + for header, value := range c.cfg.DefaultHeader { + localVarRequest.Header.Add(header, value) + } + + return localVarRequest, nil +} + +// Add a file to the multipart request +func addFile(w *multipart.Writer, fieldName, path string) error { + file, err := os.Open(path) + if err != nil { + return err + } + defer file.Close() + + part, err := w.CreateFormFile(fieldName, filepath.Base(path)) + if err != nil { + return err + } + _, err = io.Copy(part, file) + + return err +} + +// Prevent trying to import "fmt" +func reportError(format string, a ...interface{}) error { + return fmt.Errorf(format, a...) +} + +// Set request body from an interface{} +func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) { + if bodyBuf == nil { + bodyBuf = &bytes.Buffer{} + } + + if reader, ok := body.(io.Reader); ok { + _, err = bodyBuf.ReadFrom(reader) + } else if b, ok := body.([]byte); ok { + _, err = bodyBuf.Write(b) + } else if s, ok := body.(string); ok { + _, err = bodyBuf.WriteString(s) + } else if jsonCheck.MatchString(contentType) { + err = json.NewEncoder(bodyBuf).Encode(body) + } else if xmlCheck.MatchString(contentType) { + xml.NewEncoder(bodyBuf).Encode(body) + } + + if err != nil { + return nil, err + } + + if bodyBuf.Len() == 0 { + err = fmt.Errorf("Invalid body type %s\n", contentType) + return nil, err + } + return bodyBuf, nil +} + +// detectContentType method is used to figure out `Request.Body` content type for request header +func detectContentType(body interface{}) string { + contentType := "text/plain; charset=utf-8" + kind := reflect.TypeOf(body).Kind() + + switch kind { + case reflect.Struct, reflect.Map, reflect.Ptr: + contentType = "application/json; charset=utf-8" + case reflect.String: + contentType = "text/plain; charset=utf-8" + default: + if b, ok := body.([]byte); ok { + contentType = http.DetectContentType(b) + } else if kind == reflect.Slice { + contentType = "application/json; charset=utf-8" + } + } + + return contentType +} + +// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go +type cacheControl map[string]string + +func parseCacheControl(headers http.Header) cacheControl { + cc := cacheControl{} + ccHeader := headers.Get("Cache-Control") + for _, part := range strings.Split(ccHeader, ",") { + part = strings.Trim(part, " ") + if part == "" { + continue + } + if strings.ContainsRune(part, '=') { + keyval := strings.Split(part, "=") + cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",") + } else { + cc[part] = "" + } + } + return cc +} + +// CacheExpires helper function to determine remaining time before repeating a request. +func CacheExpires(r *http.Response) time.Time { + // Figure out when the cache expires. + var expires time.Time + now, err := time.Parse(time.RFC1123, r.Header.Get("date")) + if err != nil { + return time.Now() + } + respCacheControl := parseCacheControl(r.Header) + + if maxAge, ok := respCacheControl["max-age"]; ok { + lifetime, err := time.ParseDuration(maxAge + "s") + if err != nil { + expires = now + } + expires = now.Add(lifetime) + } else { + expiresHeader := r.Header.Get("Expires") + if expiresHeader != "" { + expires, err = time.Parse(time.RFC1123, expiresHeader) + if err != nil { + expires = now + } + } + } + return expires +} + +func strlen(s string) int { + return utf8.RuneCountInString(s) +} diff --git a/examples/clients/abe/configuration.go b/examples/clients/abe/configuration.go index ccc319c34aa..3e85ff02f0f 100644 --- a/examples/clients/abe/configuration.go +++ b/examples/clients/abe/configuration.go @@ -1,67 +1,73 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe import ( - "encoding/base64" "net/http" - "time" ) +// contextKeys are used to identify the type of value in the context. +// Since these are string, it is possible to get a short description of the +// context key for logging and debugging using key.String(). + +type contextKey string + +func (c contextKey) String() string { + return "auth " + string(c) +} + +var ( + // ContextOAuth2 takes a oauth2.TokenSource as authentication for the request. + ContextOAuth2 = contextKey("token") + + // ContextBasicAuth takes BasicAuth as authentication for the request. + ContextBasicAuth = contextKey("basic") + + // ContextAccessToken takes a string oauth2 access token as authentication for the request. + ContextAccessToken = contextKey("accesstoken") + + // ContextAPIKey takes an APIKey as authentication for the request + ContextAPIKey = contextKey("apikey") +) + +// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth +type BasicAuth struct { + UserName string `json:"userName,omitempty"` + Password string `json:"password,omitempty"` +} + +// APIKey provides API key based authentication to a request passed via context using ContextAPIKey +type APIKey struct { + Key string + Prefix string +} type Configuration struct { - Username string `json:"userName,omitempty"` - Password string `json:"password,omitempty"` - APIKeyPrefix map[string]string `json:"APIKeyPrefix,omitempty"` - APIKey map[string]string `json:"APIKey,omitempty"` - Debug bool `json:"debug,omitempty"` - DebugFile string `json:"debugFile,omitempty"` - OAuthToken string `json:"oAuthToken,omitempty"` BasePath string `json:"basePath,omitempty"` Host string `json:"host,omitempty"` Scheme string `json:"scheme,omitempty"` - AccessToken string `json:"accessToken,omitempty"` DefaultHeader map[string]string `json:"defaultHeader,omitempty"` UserAgent string `json:"userAgent,omitempty"` - APIClient *APIClient - Transport *http.Transport - Timeout *time.Duration `json:"timeout,omitempty"` + HTTPClient *http.Client } func NewConfiguration() *Configuration { cfg := &Configuration{ BasePath: "http://localhost", DefaultHeader: make(map[string]string), - APIKey: make(map[string]string), - APIKeyPrefix: make(map[string]string), UserAgent: "Swagger-Codegen/1.0.0/go", - APIClient: &APIClient{}, } - - cfg.APIClient.config = cfg return cfg } -func (c *Configuration) GetBasicAuthEncodedString() string { - return base64.StdEncoding.EncodeToString([]byte(c.Username + ":" + c.Password)) -} - func (c *Configuration) AddDefaultHeader(key string, value string) { c.DefaultHeader[key] = value } - -func (c *Configuration) GetAPIKeyWithPrefix(APIKeyIdentifier string) string { - if c.APIKeyPrefix[APIKeyIdentifier] != "" { - return c.APIKeyPrefix[APIKeyIdentifier] + " " + c.APIKey[APIKeyIdentifier] - } - - return c.APIKey[APIKeyIdentifier] -} diff --git a/examples/clients/abe/examplepb_a_bit_of_everything.go b/examples/clients/abe/examplepb_a_bit_of_everything.go deleted file mode 100644 index cb6fb3a487d..00000000000 --- a/examples/clients/abe/examplepb_a_bit_of_everything.go +++ /dev/null @@ -1,74 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -import ( - "time" -) - -type ExamplepbABitOfEverything struct { - - SingleNested ABitOfEverythingNested `json:"single_nested,omitempty"` - - Uuid string `json:"uuid,omitempty"` - - Nested []ABitOfEverythingNested `json:"nested,omitempty"` - - FloatValue float32 `json:"float_value,omitempty"` - - DoubleValue float64 `json:"double_value,omitempty"` - - Int64Value string `json:"int64_value,omitempty"` - - Uint64Value string `json:"uint64_value,omitempty"` - - Int32Value int32 `json:"int32_value,omitempty"` - - Fixed64Value string `json:"fixed64_value,omitempty"` - - Fixed32Value int64 `json:"fixed32_value,omitempty"` - - BoolValue bool `json:"bool_value,omitempty"` - - StringValue string `json:"string_value,omitempty"` - - BytesValue string `json:"bytes_value,omitempty"` - - Uint32Value int64 `json:"uint32_value,omitempty"` - - EnumValue ExamplepbNumericEnum `json:"enum_value,omitempty"` - - Sfixed32Value int32 `json:"sfixed32_value,omitempty"` - - Sfixed64Value string `json:"sfixed64_value,omitempty"` - - Sint32Value int32 `json:"sint32_value,omitempty"` - - Sint64Value string `json:"sint64_value,omitempty"` - - RepeatedStringValue []string `json:"repeated_string_value,omitempty"` - - OneofEmpty ProtobufEmpty `json:"oneof_empty,omitempty"` - - OneofString string `json:"oneof_string,omitempty"` - - MapValue map[string]ExamplepbNumericEnum `json:"map_value,omitempty"` - - MappedStringValue map[string]string `json:"mapped_string_value,omitempty"` - - MappedNestedValue map[string]ABitOfEverythingNested `json:"mapped_nested_value,omitempty"` - - NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` - - TimestampValue time.Time `json:"timestamp_value,omitempty"` - - RepeatedEnumValue []ExamplepbNumericEnum `json:"repeated_enum_value,omitempty"` -} diff --git a/examples/clients/abe/examplepb_numeric_enum.go b/examples/clients/abe/examplepb_numeric_enum.go deleted file mode 100644 index e953bbe34e8..00000000000 --- a/examples/clients/abe/examplepb_numeric_enum.go +++ /dev/null @@ -1,15 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -// NumericEnum is one or zero. - ZERO: ZERO means 0 - ONE: ONE means 1 -type ExamplepbNumericEnum struct { -} diff --git a/examples/clients/abe/a_bit_of_everything_nested.go b/examples/clients/abe/model_a_bit_of_everything_nested.go similarity index 69% rename from examples/clients/abe/a_bit_of_everything_nested.go rename to examples/clients/abe/model_a_bit_of_everything_nested.go index 095e8c5f118..8684f0c252d 100644 --- a/examples/clients/abe/a_bit_of_everything_nested.go +++ b/examples/clients/abe/model_a_bit_of_everything_nested.go @@ -1,22 +1,21 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe // Nested is nested type. type ABitOfEverythingNested struct { - // name is nested field. Name string `json:"name,omitempty"` Amount int64 `json:"amount,omitempty"` - Ok NestedDeepEnum `json:"ok,omitempty"` + Ok *NestedDeepEnum `json:"ok,omitempty"` } diff --git a/examples/clients/abe/model_examplepb_a_bit_of_everything.go b/examples/clients/abe/model_examplepb_a_bit_of_everything.go new file mode 100644 index 00000000000..650b96961f8 --- /dev/null +++ b/examples/clients/abe/model_examplepb_a_bit_of_everything.go @@ -0,0 +1,73 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe + +import ( + "time" +) + +type ExamplepbABitOfEverything struct { + SingleNested *ABitOfEverythingNested `json:"singleNested,omitempty"` + + Uuid string `json:"uuid,omitempty"` + + Nested []ABitOfEverythingNested `json:"nested,omitempty"` + + FloatValue float32 `json:"floatValue,omitempty"` + + DoubleValue float64 `json:"doubleValue,omitempty"` + + Int64Value string `json:"int64Value,omitempty"` + + Uint64Value string `json:"uint64Value,omitempty"` + + Int32Value int32 `json:"int32Value,omitempty"` + + Fixed64Value string `json:"fixed64Value,omitempty"` + + Fixed32Value int64 `json:"fixed32Value,omitempty"` + + BoolValue bool `json:"boolValue,omitempty"` + + StringValue string `json:"stringValue,omitempty"` + + BytesValue string `json:"bytesValue,omitempty"` + + Uint32Value int64 `json:"uint32Value,omitempty"` + + EnumValue *ExamplepbNumericEnum `json:"enumValue,omitempty"` + + Sfixed32Value int32 `json:"sfixed32Value,omitempty"` + + Sfixed64Value string `json:"sfixed64Value,omitempty"` + + Sint32Value int32 `json:"sint32Value,omitempty"` + + Sint64Value string `json:"sint64Value,omitempty"` + + RepeatedStringValue []string `json:"repeatedStringValue,omitempty"` + + OneofEmpty *ProtobufEmpty `json:"oneofEmpty,omitempty"` + + OneofString string `json:"oneofString,omitempty"` + + MapValue map[string]ExamplepbNumericEnum `json:"mapValue,omitempty"` + + MappedStringValue map[string]string `json:"mappedStringValue,omitempty"` + + MappedNestedValue map[string]ABitOfEverythingNested `json:"mappedNestedValue,omitempty"` + + NonConventionalNameValue string `json:"nonConventionalNameValue,omitempty"` + + TimestampValue time.Time `json:"timestampValue,omitempty"` + + RepeatedEnumValue []ExamplepbNumericEnum `json:"repeatedEnumValue,omitempty"` +} diff --git a/examples/clients/abe/examplepb_body.go b/examples/clients/abe/model_examplepb_body.go similarity index 69% rename from examples/clients/abe/examplepb_body.go rename to examples/clients/abe/model_examplepb_body.go index 13f4c2dc1e1..0c3d9c9b5b1 100644 --- a/examples/clients/abe/examplepb_body.go +++ b/examples/clients/abe/model_examplepb_body.go @@ -1,16 +1,15 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe type ExamplepbBody struct { - Name string `json:"name,omitempty"` } diff --git a/examples/clients/abe/model_examplepb_numeric_enum.go b/examples/clients/abe/model_examplepb_numeric_enum.go new file mode 100644 index 00000000000..900614e1208 --- /dev/null +++ b/examples/clients/abe/model_examplepb_numeric_enum.go @@ -0,0 +1,20 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe +// ExamplepbNumericEnum : NumericEnum is one or zero. - ZERO: ZERO means 0 - ONE: ONE means 1 +type ExamplepbNumericEnum string + +// List of examplepbNumericEnum +const ( + ZERO ExamplepbNumericEnum = "ZERO" + + ONE ExamplepbNumericEnum = "ONE" +) diff --git a/examples/clients/abe/model_nested_deep_enum.go b/examples/clients/abe/model_nested_deep_enum.go new file mode 100644 index 00000000000..fe86bc876b8 --- /dev/null +++ b/examples/clients/abe/model_nested_deep_enum.go @@ -0,0 +1,20 @@ +/* + * A Bit of Everything + * + * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) + * + * API version: 1.0 + * Contact: none@example.com + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package abe +// NestedDeepEnum : DeepEnum is one or zero. - FALSE: FALSE is false. - TRUE: TRUE is true. +type NestedDeepEnum string + +// List of NestedDeepEnum +const ( + FALSE NestedDeepEnum = "FALSE" + + TRUE NestedDeepEnum = "TRUE" +) diff --git a/examples/clients/abe/protobuf_empty.go b/examples/clients/abe/model_protobuf_empty.go similarity index 77% rename from examples/clients/abe/protobuf_empty.go rename to examples/clients/abe/model_protobuf_empty.go index 97c7bf612b8..b85eb6131ac 100644 --- a/examples/clients/abe/protobuf_empty.go +++ b/examples/clients/abe/model_protobuf_empty.go @@ -1,11 +1,11 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe diff --git a/examples/clients/abe/sub_string_message.go b/examples/clients/abe/model_sub_string_message.go similarity index 69% rename from examples/clients/abe/sub_string_message.go rename to examples/clients/abe/model_sub_string_message.go index 2a0874fc5fa..d4dcf4ebf16 100644 --- a/examples/clients/abe/sub_string_message.go +++ b/examples/clients/abe/model_sub_string_message.go @@ -1,16 +1,15 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe type SubStringMessage struct { - Value string `json:"value,omitempty"` } diff --git a/examples/clients/abe/nested_deep_enum.go b/examples/clients/abe/nested_deep_enum.go deleted file mode 100644 index e5fc17d50a4..00000000000 --- a/examples/clients/abe/nested_deep_enum.go +++ /dev/null @@ -1,15 +0,0 @@ -/* - * A Bit of Everything - * - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: 1.0 - * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package abe - -// DeepEnum is one or zero. - FALSE: FALSE is false. - TRUE: TRUE is true. -type NestedDeepEnum struct { -} diff --git a/examples/clients/abe/api_response.go b/examples/clients/abe/response.go similarity index 77% rename from examples/clients/abe/api_response.go rename to examples/clients/abe/response.go index ee1315f513c..a42d47cd7ab 100644 --- a/examples/clients/abe/api_response.go +++ b/examples/clients/abe/response.go @@ -1,11 +1,11 @@ -/* +/* * A Bit of Everything * * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) * - * OpenAPI spec version: 1.0 + * API version: 1.0 * Contact: none@example.com - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package abe @@ -16,15 +16,15 @@ import ( type APIResponse struct { *http.Response `json:"-"` - Message string `json:"message,omitempty"` + Message string `json:"message,omitempty"` // Operation is the name of the swagger operation. - Operation string `json:"operation,omitempty"` + Operation string `json:"operation,omitempty"` // RequestURL is the request URL. This value is always available, even if the // embedded *http.Response is nil. - RequestURL string `json:"url,omitempty"` + RequestURL string `json:"url,omitempty"` // Method is the HTTP method used for the request. This value is always // available, even if the embedded *http.Response is nil. - Method string `json:"method,omitempty"` + Method string `json:"method,omitempty"` // Payload holds the contents of the response body (which may be nil or empty). // This is provided here as the raw response.Body() reader will have already // been drained. diff --git a/examples/clients/echo/.gitignore b/examples/clients/echo/.gitignore deleted file mode 100644 index 2f88269126d..00000000000 --- a/examples/clients/echo/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/docs diff --git a/examples/clients/echo/.swagger-codegen-ignore b/examples/clients/echo/.swagger-codegen-ignore index 6c7b69a0156..c5fa491b4c5 100644 --- a/examples/clients/echo/.swagger-codegen-ignore +++ b/examples/clients/echo/.swagger-codegen-ignore @@ -1 +1,23 @@ -.gitignore +# Swagger Codegen Ignore +# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/examples/clients/echo/api/swagger.yaml b/examples/clients/echo/api/swagger.yaml new file mode 100644 index 00000000000..589fc8fe76f --- /dev/null +++ b/examples/clients/echo/api/swagger.yaml @@ -0,0 +1,88 @@ +--- +swagger: "2.0" +info: + description: "Echo Service API consists of a single service which returns\na message." + version: "version not set" + title: "Echo Service" +schemes: +- "http" +- "https" +consumes: +- "application/json" +produces: +- "application/json" +paths: + /v1/example/echo/{id}: + post: + tags: + - "EchoService" + summary: "Echo method receives a simple message and returns it." + description: "The message posted as the id parameter will also be\nreturned." + operationId: "Echo" + parameters: + - name: "id" + in: "path" + required: true + type: "string" + x-exportParamName: "Id" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/examplepbSimpleMessage" + /v1/example/echo/{id}/{num}: + get: + tags: + - "EchoService" + summary: "Echo method receives a simple message and returns it." + description: "The message posted as the id parameter will also be\nreturned." + operationId: "Echo2" + parameters: + - name: "id" + in: "path" + required: true + type: "string" + x-exportParamName: "Id" + - name: "num" + in: "path" + required: true + type: "string" + format: "int64" + x-exportParamName: "Num" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/examplepbSimpleMessage" + /v1/example/echo_body: + post: + tags: + - "EchoService" + summary: "EchoBody method receives a simple message and returns it." + operationId: "EchoBody" + parameters: + - in: "body" + name: "body" + required: true + schema: + $ref: "#/definitions/examplepbSimpleMessage" + x-exportParamName: "Body" + responses: + 200: + description: "" + schema: + $ref: "#/definitions/examplepbSimpleMessage" +definitions: + examplepbSimpleMessage: + type: "object" + properties: + id: + type: "string" + description: "Id represents the message identifier." + num: + type: "string" + format: "int64" + description: "SimpleMessage represents a simple message sent to the Echo service." + example: + num: "num" + id: "id" diff --git a/examples/clients/echo/api_client.go b/examples/clients/echo/api_client.go deleted file mode 100644 index 7a517148026..00000000000 --- a/examples/clients/echo/api_client.go +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Echo Service - * - * Echo Service API consists of a single service which returns a message. - * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package echo - -import ( - "bytes" - "fmt" - "path/filepath" - "reflect" - "strings" - "net/url" - "io/ioutil" - "github.com/go-resty/resty" -) - -type APIClient struct { - config *Configuration -} - -func (c *APIClient) SelectHeaderContentType(contentTypes []string) string { - - if len(contentTypes) == 0 { - return "" - } - if contains(contentTypes, "application/json") { - return "application/json" - } - return contentTypes[0] // use the first content type specified in 'consumes' -} - -func (c *APIClient) SelectHeaderAccept(accepts []string) string { - - if len(accepts) == 0 { - return "" - } - if contains(accepts, "application/json") { - return "application/json" - } - return strings.Join(accepts, ",") -} - -func contains(haystack []string, needle string) bool { - for _, a := range haystack { - if strings.ToLower(a) == strings.ToLower(needle) { - return true - } - } - return false -} - -func (c *APIClient) CallAPI(path string, method string, - postBody interface{}, - headerParams map[string]string, - queryParams url.Values, - formParams map[string]string, - fileName string, - fileBytes []byte) (*resty.Response, error) { - - rClient := c.prepareClient() - request := c.prepareRequest(rClient, postBody, headerParams, queryParams, formParams, fileName, fileBytes) - - switch strings.ToUpper(method) { - case "GET": - response, err := request.Get(path) - return response, err - case "POST": - response, err := request.Post(path) - return response, err - case "PUT": - response, err := request.Put(path) - return response, err - case "PATCH": - response, err := request.Patch(path) - return response, err - case "DELETE": - response, err := request.Delete(path) - return response, err - } - - return nil, fmt.Errorf("invalid method %v", method) -} - -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) -} - -func (c *APIClient) prepareClient() *resty.Client { - - rClient := resty.New() - - rClient.SetDebug(c.config.Debug) - if c.config.Transport != nil { - rClient.SetTransport(c.config.Transport) - } - - if c.config.Timeout != nil { - rClient.SetTimeout(*c.config.Timeout) - } - rClient.SetLogger(ioutil.Discard) - return rClient -} - -func (c *APIClient) prepareRequest( - rClient *resty.Client, - postBody interface{}, - headerParams map[string]string, - queryParams url.Values, - formParams map[string]string, - fileName string, - fileBytes []byte) *resty.Request { - - - request := rClient.R() - request.SetBody(postBody) - - if c.config.UserAgent != "" { - request.SetHeader("User-Agent", c.config.UserAgent) - } - - // add header parameter, if any - if len(headerParams) > 0 { - request.SetHeaders(headerParams) - } - - // add query parameter, if any - if len(queryParams) > 0 { - request.SetMultiValueQueryParams(queryParams) - } - - // add form parameter, if any - if len(formParams) > 0 { - request.SetFormData(formParams) - } - - if len(fileBytes) > 0 && fileName != "" { - _, fileNm := filepath.Split(fileName) - request.SetFileReader("file", fileNm, bytes.NewReader(fileBytes)) - } - return request -} diff --git a/examples/clients/echo/api_echo_service.go b/examples/clients/echo/api_echo_service.go new file mode 100644 index 00000000000..3163b66b3e1 --- /dev/null +++ b/examples/clients/echo/api_echo_service.go @@ -0,0 +1,212 @@ +/* + * Echo Service + * + * Echo Service API consists of a single service which returns a message. + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package echo + +import ( + "io/ioutil" + "net/http" + "net/url" + "strings" + "golang.org/x/net/context" + "encoding/json" + "fmt" +) + +// Linger please +var ( + _ context.Context +) + +type EchoServiceApiService service + +/* EchoServiceApiService Echo method receives a simple message and returns it. +The message posted as the id parameter will also be returned. + * @param ctx context.Context for authentication, logging, tracing, etc. +@param id +@return ExamplepbSimpleMessage*/ +func (a *EchoServiceApiService) Echo(ctx context.Context, id string) (ExamplepbSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ExamplepbSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo/{id}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* EchoServiceApiService Echo method receives a simple message and returns it. +The message posted as the id parameter will also be returned. + * @param ctx context.Context for authentication, logging, tracing, etc. +@param id +@param num +@return ExamplepbSimpleMessage*/ +func (a *EchoServiceApiService) Echo2(ctx context.Context, id string, num string) (ExamplepbSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Get") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ExamplepbSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo/{id}/{num}" + localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) + localVarPath = strings.Replace(localVarPath, "{"+"num"+"}", fmt.Sprintf("%v", num), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} + +/* EchoServiceApiService EchoBody method receives a simple message and returns it. + * @param ctx context.Context for authentication, logging, tracing, etc. +@param body +@return ExamplepbSimpleMessage*/ +func (a *EchoServiceApiService) EchoBody(ctx context.Context, body ExamplepbSimpleMessage) (ExamplepbSimpleMessage, *http.Response, error) { + var ( + localVarHttpMethod = strings.ToUpper("Post") + localVarPostBody interface{} + localVarFileName string + localVarFileBytes []byte + successPayload ExamplepbSimpleMessage + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/v1/example/echo_body" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHttpContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHttpContentType := selectHeaderContentType(localVarHttpContentTypes) + if localVarHttpContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHttpContentType + } + + // to determine the Accept header + localVarHttpHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHttpHeaderAccept := selectHeaderAccept(localVarHttpHeaderAccepts) + if localVarHttpHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHttpHeaderAccept + } + // body params + localVarPostBody = &body + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) + if err != nil { + return successPayload, nil, err + } + + localVarHttpResponse, err := a.client.callAPI(r) + if err != nil || localVarHttpResponse == nil { + return successPayload, localVarHttpResponse, err + } + defer localVarHttpResponse.Body.Close() + if localVarHttpResponse.StatusCode >= 300 { + bodyBytes, _ := ioutil.ReadAll(localVarHttpResponse.Body) + return successPayload, localVarHttpResponse, reportError("Status: %v, Body: %s", localVarHttpResponse.Status, bodyBytes) + } + + if err = json.NewDecoder(localVarHttpResponse.Body).Decode(&successPayload); err != nil { + return successPayload, localVarHttpResponse, err + } + + return successPayload, localVarHttpResponse, err +} diff --git a/examples/clients/echo/client.go b/examples/clients/echo/client.go new file mode 100644 index 00000000000..c8d956e29b5 --- /dev/null +++ b/examples/clients/echo/client.go @@ -0,0 +1,425 @@ +/* + * Echo Service + * + * Echo Service API consists of a single service which returns a message. + * + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) + */ + +package echo + +import ( + "bytes" + "encoding/json" + "encoding/xml" + "errors" + "fmt" + "io" + "mime/multipart" + "net/http" + "net/url" + "os" + "path/filepath" + "reflect" + "regexp" + "strconv" + "strings" + "time" + "unicode/utf8" + + "golang.org/x/net/context" + "golang.org/x/oauth2" +) + +var ( + jsonCheck = regexp.MustCompile("(?i:[application|text]/json)") + xmlCheck = regexp.MustCompile("(?i:[application|text]/xml)") +) + +// APIClient manages communication with the Echo Service API vversion not set +// In most cases there should be only one, shared, APIClient. +type APIClient struct { + cfg *Configuration + common service // Reuse a single struct instead of allocating one for each service on the heap. + + // API Services + + EchoServiceApi *EchoServiceApiService +} + +type service struct { + client *APIClient +} + +// NewAPIClient creates a new API client. Requires a userAgent string describing your application. +// optionally a custom http.Client to allow for advanced features such as caching. +func NewAPIClient(cfg *Configuration) *APIClient { + if cfg.HTTPClient == nil { + cfg.HTTPClient = http.DefaultClient + } + + c := &APIClient{} + c.cfg = cfg + c.common.client = c + + // API Services + c.EchoServiceApi = (*EchoServiceApiService)(&c.common) + + return c +} + +func atoi(in string) (int, error) { + return strconv.Atoi(in) +} + +// selectHeaderContentType select a content type from the available list. +func selectHeaderContentType(contentTypes []string) string { + if len(contentTypes) == 0 { + return "" + } + if contains(contentTypes, "application/json") { + return "application/json" + } + return contentTypes[0] // use the first content type specified in 'consumes' +} + +// selectHeaderAccept join all accept types and return +func selectHeaderAccept(accepts []string) string { + if len(accepts) == 0 { + return "" + } + + if contains(accepts, "application/json") { + return "application/json" + } + + return strings.Join(accepts, ",") +} + +// contains is a case insenstive match, finding needle in a haystack +func contains(haystack []string, needle string) bool { + for _, a := range haystack { + if strings.ToLower(a) == strings.ToLower(needle) { + return true + } + } + return false +} + +// Verify optional parameters are of the correct type. +func typeCheckParameter(obj interface{}, expected string, name string) error { + // Make sure there is an object. + if obj == nil { + return nil + } + + // Check the type is as expected. + if reflect.TypeOf(obj).String() != expected { + return fmt.Errorf("Expected %s to be of type %s but received %s.", name, expected, reflect.TypeOf(obj).String()) + } + return nil +} + +// parameterToString convert interface{} parameters to string, using a delimiter if format is provided. +func parameterToString(obj interface{}, collectionFormat string) string { + var delimiter string + + 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) +} + +// callAPI do the request. +func (c *APIClient) callAPI(request *http.Request) (*http.Response, error) { + return c.cfg.HTTPClient.Do(request) +} + +// Change base path to allow switching to mocks +func (c *APIClient) ChangeBasePath(path string) { + c.cfg.BasePath = path +} + +// prepareRequest build the request +func (c *APIClient) prepareRequest( + ctx context.Context, + path string, method string, + postBody interface{}, + headerParams map[string]string, + queryParams url.Values, + formParams url.Values, + fileName string, + fileBytes []byte) (localVarRequest *http.Request, err error) { + + var body *bytes.Buffer + + // Detect postBody type and post. + if postBody != nil { + contentType := headerParams["Content-Type"] + if contentType == "" { + contentType = detectContentType(postBody) + headerParams["Content-Type"] = contentType + } + + body, err = setBody(postBody, contentType) + if err != nil { + return nil, err + } + } + + // add form parameters and file if available. + if len(formParams) > 0 || (len(fileBytes) > 0 && fileName != "") { + if body != nil { + return nil, errors.New("Cannot specify postBody and multipart form at the same time.") + } + body = &bytes.Buffer{} + w := multipart.NewWriter(body) + + for k, v := range formParams { + for _, iv := range v { + if strings.HasPrefix(k, "@") { // file + err = addFile(w, k[1:], iv) + if err != nil { + return nil, err + } + } else { // form value + w.WriteField(k, iv) + } + } + } + if len(fileBytes) > 0 && fileName != "" { + w.Boundary() + //_, fileNm := filepath.Split(fileName) + part, err := w.CreateFormFile("file", filepath.Base(fileName)) + if err != nil { + return nil, err + } + _, err = part.Write(fileBytes) + if err != nil { + return nil, err + } + // Set the Boundary in the Content-Type + headerParams["Content-Type"] = w.FormDataContentType() + } + + // Set Content-Length + headerParams["Content-Length"] = fmt.Sprintf("%d", body.Len()) + w.Close() + } + + // Setup path and query parameters + url, err := url.Parse(path) + if err != nil { + return nil, err + } + + // Adding Query Param + query := url.Query() + for k, v := range queryParams { + for _, iv := range v { + query.Add(k, iv) + } + } + + // Encode the parameters. + url.RawQuery = query.Encode() + + // Generate a new request + if body != nil { + localVarRequest, err = http.NewRequest(method, url.String(), body) + } else { + localVarRequest, err = http.NewRequest(method, url.String(), nil) + } + if err != nil { + return nil, err + } + + // add header parameters, if any + if len(headerParams) > 0 { + headers := http.Header{} + for h, v := range headerParams { + headers.Set(h, v) + } + localVarRequest.Header = headers + } + + // Override request host, if applicable + if c.cfg.Host != "" { + localVarRequest.Host = c.cfg.Host + } + + // Add the user agent to the request. + localVarRequest.Header.Add("User-Agent", c.cfg.UserAgent) + + if ctx != nil { + // add context to the request + localVarRequest = localVarRequest.WithContext(ctx) + + // Walk through any authentication. + + // OAuth2 authentication + if tok, ok := ctx.Value(ContextOAuth2).(oauth2.TokenSource); ok { + // We were able to grab an oauth2 token from the context + var latestToken *oauth2.Token + if latestToken, err = tok.Token(); err != nil { + return nil, err + } + + latestToken.SetAuthHeader(localVarRequest) + } + + // Basic HTTP Authentication + if auth, ok := ctx.Value(ContextBasicAuth).(BasicAuth); ok { + localVarRequest.SetBasicAuth(auth.UserName, auth.Password) + } + + // AccessToken Authentication + if auth, ok := ctx.Value(ContextAccessToken).(string); ok { + localVarRequest.Header.Add("Authorization", "Bearer "+auth) + } + } + + for header, value := range c.cfg.DefaultHeader { + localVarRequest.Header.Add(header, value) + } + + return localVarRequest, nil +} + +// Add a file to the multipart request +func addFile(w *multipart.Writer, fieldName, path string) error { + file, err := os.Open(path) + if err != nil { + return err + } + defer file.Close() + + part, err := w.CreateFormFile(fieldName, filepath.Base(path)) + if err != nil { + return err + } + _, err = io.Copy(part, file) + + return err +} + +// Prevent trying to import "fmt" +func reportError(format string, a ...interface{}) error { + return fmt.Errorf(format, a...) +} + +// Set request body from an interface{} +func setBody(body interface{}, contentType string) (bodyBuf *bytes.Buffer, err error) { + if bodyBuf == nil { + bodyBuf = &bytes.Buffer{} + } + + if reader, ok := body.(io.Reader); ok { + _, err = bodyBuf.ReadFrom(reader) + } else if b, ok := body.([]byte); ok { + _, err = bodyBuf.Write(b) + } else if s, ok := body.(string); ok { + _, err = bodyBuf.WriteString(s) + } else if jsonCheck.MatchString(contentType) { + err = json.NewEncoder(bodyBuf).Encode(body) + } else if xmlCheck.MatchString(contentType) { + xml.NewEncoder(bodyBuf).Encode(body) + } + + if err != nil { + return nil, err + } + + if bodyBuf.Len() == 0 { + err = fmt.Errorf("Invalid body type %s\n", contentType) + return nil, err + } + return bodyBuf, nil +} + +// detectContentType method is used to figure out `Request.Body` content type for request header +func detectContentType(body interface{}) string { + contentType := "text/plain; charset=utf-8" + kind := reflect.TypeOf(body).Kind() + + switch kind { + case reflect.Struct, reflect.Map, reflect.Ptr: + contentType = "application/json; charset=utf-8" + case reflect.String: + contentType = "text/plain; charset=utf-8" + default: + if b, ok := body.([]byte); ok { + contentType = http.DetectContentType(b) + } else if kind == reflect.Slice { + contentType = "application/json; charset=utf-8" + } + } + + return contentType +} + +// Ripped from https://github.com/gregjones/httpcache/blob/master/httpcache.go +type cacheControl map[string]string + +func parseCacheControl(headers http.Header) cacheControl { + cc := cacheControl{} + ccHeader := headers.Get("Cache-Control") + for _, part := range strings.Split(ccHeader, ",") { + part = strings.Trim(part, " ") + if part == "" { + continue + } + if strings.ContainsRune(part, '=') { + keyval := strings.Split(part, "=") + cc[strings.Trim(keyval[0], " ")] = strings.Trim(keyval[1], ",") + } else { + cc[part] = "" + } + } + return cc +} + +// CacheExpires helper function to determine remaining time before repeating a request. +func CacheExpires(r *http.Response) time.Time { + // Figure out when the cache expires. + var expires time.Time + now, err := time.Parse(time.RFC1123, r.Header.Get("date")) + if err != nil { + return time.Now() + } + respCacheControl := parseCacheControl(r.Header) + + if maxAge, ok := respCacheControl["max-age"]; ok { + lifetime, err := time.ParseDuration(maxAge + "s") + if err != nil { + expires = now + } + expires = now.Add(lifetime) + } else { + expiresHeader := r.Header.Get("Expires") + if expiresHeader != "" { + expires, err = time.Parse(time.RFC1123, expiresHeader) + if err != nil { + expires = now + } + } + } + return expires +} + +func strlen(s string) int { + return utf8.RuneCountInString(s) +} diff --git a/examples/clients/echo/configuration.go b/examples/clients/echo/configuration.go index 9a75a30aeec..5f730c12ab7 100644 --- a/examples/clients/echo/configuration.go +++ b/examples/clients/echo/configuration.go @@ -1,67 +1,72 @@ -/* +/* * Echo Service * * Echo Service API consists of a single service which returns a message. * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package echo import ( - "encoding/base64" "net/http" - "time" ) +// contextKeys are used to identify the type of value in the context. +// Since these are string, it is possible to get a short description of the +// context key for logging and debugging using key.String(). + +type contextKey string + +func (c contextKey) String() string { + return "auth " + string(c) +} + +var ( + // ContextOAuth2 takes a oauth2.TokenSource as authentication for the request. + ContextOAuth2 = contextKey("token") + + // ContextBasicAuth takes BasicAuth as authentication for the request. + ContextBasicAuth = contextKey("basic") + + // ContextAccessToken takes a string oauth2 access token as authentication for the request. + ContextAccessToken = contextKey("accesstoken") + + // ContextAPIKey takes an APIKey as authentication for the request + ContextAPIKey = contextKey("apikey") +) + +// BasicAuth provides basic http authentication to a request passed via context using ContextBasicAuth +type BasicAuth struct { + UserName string `json:"userName,omitempty"` + Password string `json:"password,omitempty"` +} + +// APIKey provides API key based authentication to a request passed via context using ContextAPIKey +type APIKey struct { + Key string + Prefix string +} type Configuration struct { - Username string `json:"userName,omitempty"` - Password string `json:"password,omitempty"` - APIKeyPrefix map[string]string `json:"APIKeyPrefix,omitempty"` - APIKey map[string]string `json:"APIKey,omitempty"` - Debug bool `json:"debug,omitempty"` - DebugFile string `json:"debugFile,omitempty"` - OAuthToken string `json:"oAuthToken,omitempty"` BasePath string `json:"basePath,omitempty"` Host string `json:"host,omitempty"` Scheme string `json:"scheme,omitempty"` - AccessToken string `json:"accessToken,omitempty"` DefaultHeader map[string]string `json:"defaultHeader,omitempty"` UserAgent string `json:"userAgent,omitempty"` - APIClient *APIClient - Transport *http.Transport - Timeout *time.Duration `json:"timeout,omitempty"` + HTTPClient *http.Client } func NewConfiguration() *Configuration { cfg := &Configuration{ BasePath: "http://localhost", DefaultHeader: make(map[string]string), - APIKey: make(map[string]string), - APIKeyPrefix: make(map[string]string), UserAgent: "Swagger-Codegen/1.0.0/go", - APIClient: &APIClient{}, } - - cfg.APIClient.config = cfg return cfg } -func (c *Configuration) GetBasicAuthEncodedString() string { - return base64.StdEncoding.EncodeToString([]byte(c.Username + ":" + c.Password)) -} - func (c *Configuration) AddDefaultHeader(key string, value string) { c.DefaultHeader[key] = value } - -func (c *Configuration) GetAPIKeyWithPrefix(APIKeyIdentifier string) string { - if c.APIKeyPrefix[APIKeyIdentifier] != "" { - return c.APIKeyPrefix[APIKeyIdentifier] + " " + c.APIKey[APIKeyIdentifier] - } - - return c.APIKey[APIKeyIdentifier] -} diff --git a/examples/clients/echo/echo_service_api.go b/examples/clients/echo/echo_service_api.go deleted file mode 100644 index 1f562327d3d..00000000000 --- a/examples/clients/echo/echo_service_api.go +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Echo Service - * - * Echo Service API consists of a single service which returns a message. - * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -package echo - -import ( - "net/url" - "strings" - "encoding/json" - "fmt" -) - -type EchoServiceApi struct { - Configuration *Configuration -} - -func NewEchoServiceApi() *EchoServiceApi { - configuration := NewConfiguration() - return &EchoServiceApi{ - Configuration: configuration, - } -} - -func NewEchoServiceApiWithBasePath(basePath string) *EchoServiceApi { - configuration := NewConfiguration() - configuration.BasePath = basePath - - return &EchoServiceApi{ - Configuration: configuration, - } -} - -/** - * Echo method receives a simple message and returns it. - * The message posted as the id parameter will also be returned. - * - * @param id - * @return *ExamplepbSimpleMessage - */ -func (a EchoServiceApi) Echo(id string) (*ExamplepbSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo/{id}" - localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * Echo method receives a simple message and returns it. - * The message posted as the id parameter will also be returned. - * - * @param id - * @param num - * @return *ExamplepbSimpleMessage - */ -func (a EchoServiceApi) Echo2(id string, num string) (*ExamplepbSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Get") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo/{id}/{num}" - localVarPath = strings.Replace(localVarPath, "{"+"id"+"}", fmt.Sprintf("%v", id), -1) - localVarPath = strings.Replace(localVarPath, "{"+"num"+"}", fmt.Sprintf("%v", num), -1) - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - var successPayload = new(ExamplepbSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "Echo2", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - -/** - * EchoBody method receives a simple message and returns it. - * - * @param body - * @return *ExamplepbSimpleMessage - */ -func (a EchoServiceApi) EchoBody(body ExamplepbSimpleMessage) (*ExamplepbSimpleMessage, *APIResponse, error) { - - var localVarHttpMethod = strings.ToUpper("Post") - // create path and map variables - localVarPath := a.Configuration.BasePath + "/v1/example/echo_body" - - localVarHeaderParams := make(map[string]string) - localVarQueryParams := url.Values{} - localVarFormParams := make(map[string]string) - var localVarPostBody interface{} - var localVarFileName string - var localVarFileBytes []byte - // add default headers if any - for key := range a.Configuration.DefaultHeader { - localVarHeaderParams[key] = a.Configuration.DefaultHeader[key] - } - - // to determine the Content-Type header - localVarHttpContentTypes := []string{ "application/json", } - - // set Content-Type header - localVarHttpContentType := a.Configuration.APIClient.SelectHeaderContentType(localVarHttpContentTypes) - if localVarHttpContentType != "" { - localVarHeaderParams["Content-Type"] = localVarHttpContentType - } - // to determine the Accept header - localVarHttpHeaderAccepts := []string{ - "application/json", - } - - // set Accept header - localVarHttpHeaderAccept := a.Configuration.APIClient.SelectHeaderAccept(localVarHttpHeaderAccepts) - if localVarHttpHeaderAccept != "" { - localVarHeaderParams["Accept"] = localVarHttpHeaderAccept - } - // body params - localVarPostBody = &body - var successPayload = new(ExamplepbSimpleMessage) - localVarHttpResponse, err := a.Configuration.APIClient.CallAPI(localVarPath, localVarHttpMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFileName, localVarFileBytes) - - var localVarURL, _ = url.Parse(localVarPath) - localVarURL.RawQuery = localVarQueryParams.Encode() - var localVarAPIResponse = &APIResponse{Operation: "EchoBody", Method: localVarHttpMethod, RequestURL: localVarURL.String()} - if localVarHttpResponse != nil { - localVarAPIResponse.Response = localVarHttpResponse.RawResponse - localVarAPIResponse.Payload = localVarHttpResponse.Body() - } - - if err != nil { - return successPayload, localVarAPIResponse, err - } - err = json.Unmarshal(localVarHttpResponse.Body(), &successPayload) - return successPayload, localVarAPIResponse, err -} - diff --git a/examples/clients/echo/examplepb_simple_message.go b/examples/clients/echo/model_examplepb_simple_message.go similarity index 73% rename from examples/clients/echo/examplepb_simple_message.go rename to examples/clients/echo/model_examplepb_simple_message.go index 98eb8325083..cbc5411aa3f 100644 --- a/examples/clients/echo/examplepb_simple_message.go +++ b/examples/clients/echo/model_examplepb_simple_message.go @@ -1,18 +1,16 @@ -/* +/* * Echo Service * * Echo Service API consists of a single service which returns a message. * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package echo // SimpleMessage represents a simple message sent to the Echo service. type ExamplepbSimpleMessage struct { - // Id represents the message identifier. Id string `json:"id,omitempty"` diff --git a/examples/clients/echo/api_response.go b/examples/clients/echo/response.go similarity index 75% rename from examples/clients/echo/api_response.go rename to examples/clients/echo/response.go index 8b0d07c4a13..a82295589de 100644 --- a/examples/clients/echo/api_response.go +++ b/examples/clients/echo/response.go @@ -1,11 +1,10 @@ -/* +/* * Echo Service * * Echo Service API consists of a single service which returns a message. * - * OpenAPI spec version: version not set - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * API version: version not set + * Generated by: Swagger Codegen (https://github.com/swagger-api/swagger-codegen.git) */ package echo @@ -16,15 +15,15 @@ import ( type APIResponse struct { *http.Response `json:"-"` - Message string `json:"message,omitempty"` + Message string `json:"message,omitempty"` // Operation is the name of the swagger operation. - Operation string `json:"operation,omitempty"` + Operation string `json:"operation,omitempty"` // RequestURL is the request URL. This value is always available, even if the // embedded *http.Response is nil. - RequestURL string `json:"url,omitempty"` + RequestURL string `json:"url,omitempty"` // Method is the HTTP method used for the request. This value is always // available, even if the embedded *http.Response is nil. - Method string `json:"method,omitempty"` + Method string `json:"method,omitempty"` // Payload holds the contents of the response body (which may be nil or empty). // This is provided here as the raw response.Body() reader will have already // been drained. diff --git a/examples/examplepb/a_bit_of_everything.swagger.json b/examples/examplepb/a_bit_of_everything.swagger.json index aa7f2479021..cdb1ce42479 100644 --- a/examples/examplepb/a_bit_of_everything.swagger.json +++ b/examples/examplepb/a_bit_of_everything.swagger.json @@ -125,83 +125,83 @@ "default": "FALSE" }, { - "name": "float_value", + "name": "floatValue", "in": "query", "required": false, "type": "number", "format": "float" }, { - "name": "double_value", + "name": "doubleValue", "in": "query", "required": false, "type": "number", "format": "double" }, { - "name": "int64_value", + "name": "int64Value", "in": "query", "required": false, "type": "string", "format": "int64" }, { - "name": "uint64_value", + "name": "uint64Value", "in": "query", "required": false, "type": "string", "format": "uint64" }, { - "name": "int32_value", + "name": "int32Value", "in": "query", "required": false, "type": "integer", "format": "int32" }, { - "name": "fixed64_value", + "name": "fixed64Value", "in": "query", "required": false, "type": "string", "format": "uint64" }, { - "name": "fixed32_value", + "name": "fixed32Value", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "bool_value", + "name": "boolValue", "in": "query", "required": false, "type": "boolean", "format": "boolean" }, { - "name": "string_value", + "name": "stringValue", "in": "query", "required": false, "type": "string" }, { - "name": "bytes_value", + "name": "bytesValue", "in": "query", "required": false, "type": "string", "format": "byte" }, { - "name": "uint32_value", + "name": "uint32Value", "in": "query", "required": false, "type": "integer", "format": "int64" }, { - "name": "enum_value", + "name": "enumValue", "description": " - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -213,35 +213,35 @@ "default": "ZERO" }, { - "name": "sfixed32_value", + "name": "sfixed32Value", "in": "query", "required": false, "type": "integer", "format": "int32" }, { - "name": "sfixed64_value", + "name": "sfixed64Value", "in": "query", "required": false, "type": "string", "format": "int64" }, { - "name": "sint32_value", + "name": "sint32Value", "in": "query", "required": false, "type": "integer", "format": "int32" }, { - "name": "sint64_value", + "name": "sint64Value", "in": "query", "required": false, "type": "string", "format": "int64" }, { - "name": "repeated_string_value", + "name": "repeatedStringValue", "in": "query", "required": false, "type": "array", @@ -250,7 +250,7 @@ } }, { - "name": "oneof_string", + "name": "oneofString", "in": "query", "required": false, "type": "string" @@ -262,14 +262,14 @@ "type": "string" }, { - "name": "timestamp_value", + "name": "timestampValue", "in": "query", "required": false, "type": "string", "format": "date-time" }, { - "name": "repeated_enum_value", + "name": "repeatedEnumValue", "description": "repeated enum value. it is comma-separated in query.\n\n - ZERO: ZERO means 0\n - ONE: ONE means 1", "in": "query", "required": false, @@ -736,7 +736,7 @@ "examplepbABitOfEverything": { "type": "object", "properties": { - "single_nested": { + "singleNested": { "$ref": "#/definitions/ABitOfEverythingNested" }, "uuid": { @@ -748,93 +748,93 @@ "$ref": "#/definitions/ABitOfEverythingNested" } }, - "float_value": { + "floatValue": { "type": "number", "format": "float" }, - "double_value": { + "doubleValue": { "type": "number", "format": "double" }, - "int64_value": { + "int64Value": { "type": "string", "format": "int64" }, - "uint64_value": { + "uint64Value": { "type": "string", "format": "uint64" }, - "int32_value": { + "int32Value": { "type": "integer", "format": "int32" }, - "fixed64_value": { + "fixed64Value": { "type": "string", "format": "uint64" }, - "fixed32_value": { + "fixed32Value": { "type": "integer", "format": "int64" }, - "bool_value": { + "boolValue": { "type": "boolean", "format": "boolean" }, - "string_value": { + "stringValue": { "type": "string" }, - "bytes_value": { + "bytesValue": { "type": "string", "format": "byte" }, - "uint32_value": { + "uint32Value": { "type": "integer", "format": "int64" }, - "enum_value": { + "enumValue": { "$ref": "#/definitions/examplepbNumericEnum" }, - "sfixed32_value": { + "sfixed32Value": { "type": "integer", "format": "int32" }, - "sfixed64_value": { + "sfixed64Value": { "type": "string", "format": "int64" }, - "sint32_value": { + "sint32Value": { "type": "integer", "format": "int32" }, - "sint64_value": { + "sint64Value": { "type": "string", "format": "int64" }, - "repeated_string_value": { + "repeatedStringValue": { "type": "array", "items": { "type": "string" } }, - "oneof_empty": { + "oneofEmpty": { "$ref": "#/definitions/protobufEmpty" }, - "oneof_string": { + "oneofString": { "type": "string" }, - "map_value": { + "mapValue": { "type": "object", "additionalProperties": { "$ref": "#/definitions/examplepbNumericEnum" } }, - "mapped_string_value": { + "mappedStringValue": { "type": "object", "additionalProperties": { "type": "string" } }, - "mapped_nested_value": { + "mappedNestedValue": { "type": "object", "additionalProperties": { "$ref": "#/definitions/ABitOfEverythingNested" @@ -843,11 +843,11 @@ "nonConventionalNameValue": { "type": "string" }, - "timestamp_value": { + "timestampValue": { "type": "string", "format": "date-time" }, - "repeated_enum_value": { + "repeatedEnumValue": { "type": "array", "items": { "$ref": "#/definitions/examplepbNumericEnum" diff --git a/examples/examplepb/wrappers.swagger.json b/examples/examplepb/wrappers.swagger.json index 01fd9d2e6a9..fc63e28fb53 100644 --- a/examples/examplepb/wrappers.swagger.json +++ b/examples/examplepb/wrappers.swagger.json @@ -46,26 +46,26 @@ "examplepbWrappers": { "type": "object", "properties": { - "string_value": { + "stringValue": { "type": "string" }, - "int32_value": { + "int32Value": { "type": "integer", "format": "int32" }, - "int64_value": { + "int64Value": { "type": "integer", "format": "int64" }, - "float_value": { + "floatValue": { "type": "number", "format": "float" }, - "double_value": { + "doubleValue": { "type": "number", "format": "double" }, - "bool_value": { + "boolValue": { "type": "boolean", "format": "boolean" } diff --git a/examples/integration_test.go b/examples/integration_test.go index 7a51868a99d..7afa4707918 100644 --- a/examples/integration_test.go +++ b/examples/integration_test.go @@ -7,13 +7,13 @@ import ( "io" "io/ioutil" "net/http" - "reflect" "strconv" "strings" "sync" "testing" "time" + "github.com/go-test/deep" "github.com/golang/protobuf/jsonpb" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes/empty" @@ -124,8 +124,8 @@ func testEchoBody(t *testing.T, port int) { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return } - if got, want := received, sent; !reflect.DeepEqual(got, want) { - t.Errorf("msg.Id = %q; want %q", got, want) + if diff := deep.Equal(received, sent); diff != nil { + t.Error(diff) } if got, want := resp.Header.Get("Grpc-Metadata-Foo"), "foo1"; got != want { @@ -177,6 +177,12 @@ func testABECreate(t *testing.T, port int) { Sint32Value: 2147483647, Sint64Value: 4611686018427387903, NonConventionalNameValue: "camelCase", + MapValue: map[string]gw.NumericEnum{}, + MappedStringValue: map[string]string{}, + RepeatedStringValue: []string{}, + RepeatedEnumValue: []gw.NumericEnum{}, + MappedNestedValue: map[string]*gw.ABitOfEverything_Nested{}, + Nested: []*gw.ABitOfEverything_Nested{}, } url := fmt.Sprintf("http://localhost:%d/v1/example/a_bit_of_everything/%f/%f/%d/separator/%d/%d/%d/%d/%v/%s/%d/%d/%d/%d/%d/%s", port, want.FloatValue, want.DoubleValue, want.Int64Value, want.Uint64Value, want.Int32Value, want.Fixed64Value, want.Fixed32Value, want.BoolValue, want.StringValue, want.Uint32Value, want.Sfixed32Value, want.Sfixed64Value, want.Sint32Value, want.Sint64Value, want.NonConventionalNameValue) @@ -206,8 +212,8 @@ func testABECreate(t *testing.T, port int) { t.Error("msg.Uuid is empty; want not empty") } msg.Uuid = "" - if got := msg; !reflect.DeepEqual(got, want) { - t.Errorf("msg= %v; want %v", &got, &want) + if diff := deep.Equal(msg, want); diff != nil { + t.Error(diff) } } @@ -239,6 +245,7 @@ func testABECreateBody(t *testing.T, port int) { Amount: 20, }, }, + RepeatedEnumValue: []gw.NumericEnum{}, RepeatedStringValue: []string{"a", "b", "c"}, OneofValue: &gw.ABitOfEverything_OneofString{ OneofString: "x", @@ -289,8 +296,8 @@ func testABECreateBody(t *testing.T, port int) { t.Error("msg.Uuid is empty; want not empty") } msg.Uuid = "" - if got := msg; !reflect.DeepEqual(got, want) { - t.Errorf("msg= %v; want %v", &got, &want) + if diff := deep.Equal(msg, want); diff != nil { + t.Error(diff) } } @@ -427,8 +434,8 @@ func testABELookup(t *testing.T, port int) { t.Errorf("jsonpb.UnmarshalString(%s, &msg) failed with %v; want success", buf, err) return } - if got := msg; !reflect.DeepEqual(got, want) { - t.Errorf("msg= %v; want %v", &got, &want) + if diff := deep.Equal(msg, want); diff != nil { + t.Error(diff) } if got, want := resp.Header.Get("Grpc-Metadata-Uuid"), want.Uuid; got != want { @@ -610,8 +617,8 @@ func testABEBulkEcho(t *testing.T, port int) { }() wg.Wait() - if !reflect.DeepEqual(got, want) { - t.Errorf("got = %v; want %v", got, want) + if diff := deep.Equal(got, want); diff != nil { + t.Error(diff) } } @@ -771,16 +778,16 @@ func TestErrorWithDetails(t *testing.T) { if got, want := details["detail"], "error debug details"; got != want { t.Errorf("msg.Details[\"detail\"] = %q; want %q", got, want) } - entries, ok := details["stack_entries"].([]interface{}) + entries, ok := details["stackEntries"].([]interface{}) if got, want := ok, true; got != want { - t.Fatalf("msg.Details[0][\"stack_entries\"] got type: %T, want %T", entries, []string{}) + t.Fatalf("msg.Details[0][\"stackEntries\"] got type: %T, want %T", entries, []interface{}{}) } entry, ok := entries[0].(string) if got, want := ok, true; got != want { - t.Fatalf("msg.Details[0][\"stack_entries\"][0] got type: %T, want %T", entry, "") + t.Fatalf("msg.Details[0][\"stackEntries\"][0] got type: %T, want %T", entry, "") } if got, want := entries[0], "foo:1"; got != want { - t.Errorf("msg.Details[\"stack_entries\"][0] = %q; want %q", got, want) + t.Errorf("msg.Details[\"stackEntries\"][0] = %q; want %q", got, want) } } diff --git a/protoc-gen-swagger/genswagger/template.go b/protoc-gen-swagger/genswagger/template.go index 7c55d5367c9..3d69770fda6 100644 --- a/protoc-gen-swagger/genswagger/template.go +++ b/protoc-gen-swagger/genswagger/template.go @@ -109,7 +109,7 @@ func queryParams(message *descriptor.Message, field *descriptor.Field, prefix st desc = strings.TrimSpace(schema.Title + ". " + schema.Description) } param := swaggerParameterObject{ - Name: prefix + field.GetName(), + Name: prefix + field.GetJsonName(), Description: desc, In: "query", Type: schema.Type, @@ -253,7 +253,7 @@ func renderMessagesAsDefinition(messages messageMap, d swaggerDefinitionsObject, panic(err) } - schema.Properties = append(schema.Properties, keyVal{f.GetName(), fieldValue}) + schema.Properties = append(schema.Properties, keyVal{f.GetJsonName(), fieldValue}) } d[fullyQualifiedNameToSwaggerName(msg.FQMN(), reg)] = schema } diff --git a/protoc-gen-swagger/genswagger/template_test.go b/protoc-gen-swagger/genswagger/template_test.go index d24f978fbeb..c5fe091124b 100644 --- a/protoc-gen-swagger/genswagger/template_test.go +++ b/protoc-gen-swagger/genswagger/template_test.go @@ -5,6 +5,8 @@ import ( "reflect" "testing" + "github.com/go-test/deep" + "github.com/golang/protobuf/proto" protodescriptor "github.com/golang/protobuf/protoc-gen-go/descriptor" plugin "github.com/golang/protobuf/protoc-gen-go/plugin" @@ -45,14 +47,16 @@ func TestMessageToQueryParameters(t *testing.T) { Name: proto.String("ExampleMessage"), Field: []*protodescriptor.FieldDescriptorProto{ { - Name: proto.String("a"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), - Number: proto.Int32(1), + Name: proto.String("a"), + JsonName: proto.String("a"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), }, { - Name: proto.String("b"), - Type: protodescriptor.FieldDescriptorProto_TYPE_DOUBLE.Enum(), - Number: proto.Int32(2), + Name: proto.String("b"), + JsonName: proto.String("b"), + Type: protodescriptor.FieldDescriptorProto_TYPE_DOUBLE.Enum(), + Number: proto.Int32(2), }, }, }, @@ -91,12 +95,14 @@ func TestMessageToQueryParameters(t *testing.T) { Name: proto.String("Nested"), Field: []*protodescriptor.FieldDescriptorProto{ { - Name: proto.String("a"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), - Number: proto.Int32(1), + Name: proto.String("a"), + JsonName: proto.String("a"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), }, { Name: proto.String("deep"), + JsonName: proto.String("deep"), Type: protodescriptor.FieldDescriptorProto_TYPE_MESSAGE.Enum(), TypeName: proto.String(".example.Nested.DeepNested"), Number: proto.Int32(2), @@ -106,12 +112,14 @@ func TestMessageToQueryParameters(t *testing.T) { Name: proto.String("DeepNested"), Field: []*protodescriptor.FieldDescriptorProto{ { - Name: proto.String("b"), - Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), - Number: proto.Int32(1), + Name: proto.String("b"), + JsonName: proto.String("b"), + Type: protodescriptor.FieldDescriptorProto_TYPE_STRING.Enum(), + Number: proto.Int32(1), }, { Name: proto.String("c"), + JsonName: proto.String("c"), Type: protodescriptor.FieldDescriptorProto_TYPE_ENUM.Enum(), TypeName: proto.String(".example.Nested.DeepNested.DeepEnum"), Number: proto.Int32(2), @@ -188,8 +196,8 @@ func TestMessageToQueryParameters(t *testing.T) { if err != nil { t.Fatalf("failed to convert message to query parameters: %s", err) } - if !reflect.DeepEqual(params, test.Params) { - t.Errorf("expected %v, got %v", test.Params, params) + if diff := deep.Equal(params, test.Params); diff != nil { + t.Error(diff) } } } diff --git a/runtime/marshal_jsonpb.go b/runtime/marshal_jsonpb.go index d42cc593e51..25830f0bae3 100644 --- a/runtime/marshal_jsonpb.go +++ b/runtime/marshal_jsonpb.go @@ -11,6 +11,10 @@ import ( "github.com/golang/protobuf/proto" ) +var unmarshaler = &jsonpb.Unmarshaler{ + AllowUnknownFields: true, +} + // JSONPb is a Marshaler which marshals/unmarshals into/from JSON // with the "github.com/golang/protobuf/jsonpb". // It supports fully functionality of protobuf unlike JSONBuiltin. @@ -111,7 +115,6 @@ func decodeJSONPb(d *json.Decoder, v interface{}) error { if !ok { return decodeNonProtoField(d, v) } - unmarshaler := &jsonpb.Unmarshaler{AllowUnknownFields: true} return unmarshaler.UnmarshalNext(d, p) } @@ -125,7 +128,6 @@ func decodeNonProtoField(d *json.Decoder, v interface{}) error { rv.Set(reflect.New(rv.Type().Elem())) } if rv.Type().ConvertibleTo(typeProtoMessage) { - unmarshaler := &jsonpb.Unmarshaler{AllowUnknownFields: true} return unmarshaler.UnmarshalNext(d, rv.Interface().(proto.Message)) } rv = rv.Elem() diff --git a/runtime/marshaler_registry.go b/runtime/marshaler_registry.go index 928f0733214..486b085c68d 100644 --- a/runtime/marshaler_registry.go +++ b/runtime/marshaler_registry.go @@ -13,7 +13,10 @@ var ( acceptHeader = http.CanonicalHeaderKey("Accept") contentTypeHeader = http.CanonicalHeaderKey("Content-Type") - defaultMarshaler = &JSONPb{OrigName: true} + defaultMarshaler = &JSONPb{ + EnumsAsInts: false, + EmitDefaults: true, + } ) // MarshalerForRequest returns the inbound/outbound marshalers for this request.