From 8ce990d3d7fe484619bd91ef45907fe026751dde Mon Sep 17 00:00:00 2001 From: Ween Jiann <16207788+lwj5@users.noreply.github.com> Date: Tue, 11 Apr 2023 15:38:58 +0800 Subject: [PATCH] [go-server] Add ability to handle parameters of `number` type (#15079) * Add ability to handle parameters of number type * Generate samples * Add handling for number without format * Regenerate samples * Fix indentation --- .../go-server/controller-api.mustache | 84 ++++++++++++++- .../main/resources/go-server/routers.mustache | 100 +++++++++++++++--- .../petstore/go-api-server/go/api_pet.go | 4 - .../petstore/go-api-server/go/api_store.go | 2 - .../petstore/go-api-server/go/api_user.go | 3 - .../petstore/go-api-server/go/routers.go | 100 +++++++++++++++--- .../petstore/go-chi-server/go/api_pet.go | 4 - .../petstore/go-chi-server/go/api_store.go | 2 - .../petstore/go-chi-server/go/api_user.go | 3 - .../petstore/go-chi-server/go/routers.go | 100 +++++++++++++++--- .../petstore/go-server-required/go/api_pet.go | 4 - .../go-server-required/go/api_store.go | 2 - .../go-server-required/go/api_user.go | 3 - .../petstore/go-server-required/go/routers.go | 100 +++++++++++++++--- 14 files changed, 415 insertions(+), 96 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/go-server/controller-api.mustache b/modules/openapi-generator/src/main/resources/go-server/controller-api.mustache index 9fb35bb4ecdb..0aebe5dca7ae 100644 --- a/modules/openapi-generator/src/main/resources/go-server/controller-api.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/controller-api.mustache @@ -89,6 +89,27 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{/hasQueryParams}} {{#allParams}} {{#isPathParam}} + {{#isNumber}} + {{paramName}}Param, err := parseFloat32Parameter({{#routers}}{{#mux}}params["{{baseName}}"]{{/mux}}{{#chi}}chi.URLParam(r, "{{baseName}}"){{/chi}}{{/routers}}, {{required}}) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + {{/isNumber}} + {{#isFloat}} + {{paramName}}Param, err := parseFloat32Parameter({{#routers}}{{#mux}}params["{{baseName}}"]{{/mux}}{{#chi}}chi.URLParam(r, "{{baseName}}"){{/chi}}{{/routers}}, {{required}}) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + {{/isFloat}} + {{#isDouble}} + {{paramName}}Param, err := parseFloat64Parameter({{#routers}}{{#mux}}params["{{baseName}}"]{{/mux}}{{#chi}}chi.URLParam(r, "{{baseName}}"){{/chi}}{{/routers}}, {{required}}) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + {{/isDouble}} {{#isLong}} {{paramName}}Param, err := parseInt64Parameter({{#routers}}{{#mux}}params["{{baseName}}"]{{/mux}}{{#chi}}chi.URLParam(r, "{{baseName}}"){{/chi}}{{/routers}}, {{required}}) if err != nil { @@ -103,12 +124,40 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re return } {{/isInteger}} + {{^isNumber}} + {{^isFloat}} + {{^isDouble}} {{^isLong}} {{^isInteger}} {{paramName}}Param := {{#routers}}{{#mux}}params["{{baseName}}"]{{/mux}}{{#chi}}chi.URLParam(r, "{{baseName}}"){{/chi}}{{/routers}} - {{/isInteger}}{{/isLong}} + {{/isInteger}} + {{/isLong}} + {{/isDouble}} + {{/isFloat}} + {{/isNumber}} {{/isPathParam}} {{#isQueryParam}} + {{#isNumber}} + {{paramName}}Param, err := parseFloat32Parameter(query.Get("{{baseName}}"), {{required}}) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + {{/isNumber}} + {{#isFloat}} + {{paramName}}Param, err := parseFloat32Parameter(query.Get("{{baseName}}"), {{required}}) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + {{/isFloat}} + {{#isDouble}} + {{paramName}}Param, err := parseFloat64Parameter(query.Get("{{baseName}}"), {{required}}) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + {{/isDouble}} {{#isLong}} {{paramName}}Param, err := parseInt64Parameter(query.Get("{{baseName}}"), {{required}}) if err != nil { @@ -131,6 +180,27 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re } {{/isBoolean}} {{#isArray}} + {{#items.isNumber}} + {{paramName}}Param, err := parseFloat32ArrayParameter(query.Get("{{baseName}}"), {{required}}) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + {{/items.isNumber}} + {{#items.isFloat}} + {{paramName}}Param, err := parseFloat32ArrayParameter(query.Get("{{baseName}}"), {{required}}) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + {{/items.isFloat}} + {{#items.isDouble}} + {{paramName}}Param, err := parseFloat64ArrayParameter(query.Get("{{baseName}}"), {{required}}) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + {{/items.isDouble}} {{#items.isLong}} {{paramName}}Param, err := parseInt64ArrayParameter(query.Get("{{baseName}}"), ",", {{required}}) if err != nil { @@ -145,12 +215,21 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re return } {{/items.isInteger}} + {{^items.isNumber}} + {{^items.isFloat}} + {{^items.isDouble}} {{^items.isLong}} {{^items.isInteger}} {{paramName}}Param := strings.Split(query.Get("{{baseName}}"), ",") {{/items.isInteger}} {{/items.isLong}} + {{/items.isDouble}} + {{/items.isFloat}} + {{/items.isNumber}} {{/isArray}} + {{^isNumber}} + {{^isFloat}} + {{^isDouble}} {{^isLong}} {{^isInteger}} {{^isBoolean}} @@ -160,6 +239,9 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{/isBoolean}} {{/isInteger}} {{/isLong}} + {{/isDouble}} + {{/isFloat}} + {{/isNumber}} {{/isQueryParam}} {{#isFormParam}} {{#isFile}}{{#isArray}} diff --git a/modules/openapi-generator/src/main/resources/go-server/routers.mustache b/modules/openapi-generator/src/main/resources/go-server/routers.mustache index 27ba6151a504..4cd2dfc7b4de 100644 --- a/modules/openapi-generator/src/main/resources/go-server/routers.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/routers.mustache @@ -171,8 +171,8 @@ func readFileHeaderToTempFile(fileHeader *multipart.FileHeader) (*os.File, error return file, nil } -// parseInt64Parameter parses a string parameter to an int64. -func parseInt64Parameter(param string, required bool) (int64, error) { +// parseFloatParameter parses a string parameter to an int64. +func parseFloatParameter(param string, bitSize int, required bool) (float64, error) { if param == "" { if required { return 0, errors.New(errMsgRequiredMissing) @@ -181,25 +181,42 @@ func parseInt64Parameter(param string, required bool) (int64, error) { return 0, nil } - return strconv.ParseInt(param, 10, 64) + return strconv.ParseFloat(param, bitSize) +} + +// parseFloat64Parameter parses a string parameter to an float64. +func parseFloat64Parameter(param string, required bool) (float64, error) { + return parseFloatParameter(param, 64, required) +} + +// parseFloat32Parameter parses a string parameter to an float32. +func parseFloat32Parameter(param string, required bool) (float32, error) { + val, err := parseFloatParameter(param, 32, required) + return float32(val), err +} + +// parseIntParameter parses a string parameter to an int64. +func parseIntParameter(param string, bitSize int, required bool) (int64, error) { + if param == "" { + if required { + return 0, errors.New(errMsgRequiredMissing) + } + + return 0, nil + } + + return strconv.ParseInt(param, 10, bitSize) +} + +// parseInt64Parameter parses a string parameter to an int64. +func parseInt64Parameter(param string, required bool) (int64, error) { + return parseIntParameter(param, 64, required) } // parseInt32Parameter parses a string parameter to an int32. func parseInt32Parameter(param string, required bool) (int32, error) { - if param == "" { - if required { - return 0, errors.New(errMsgRequiredMissing) - } - - return 0, nil - } - - val, err := strconv.ParseInt(param, 10, 32) - if err != nil { - return -1, err - } - - return int32(val), nil + val, err := parseIntParameter(param, 32, required) + return int32(val), err } // parseBoolParameter parses a string parameter to a bool @@ -220,6 +237,55 @@ func parseBoolParameter(param string, required bool) (bool, error) { return bool(val), nil } +// parseFloat64ArrayParameter parses a string parameter containing array of values to []Float64. +func parseFloat64ArrayParameter(param, delim string, required bool) ([]float64, error) { + if param == "" { + if required { + return nil, errors.New(errMsgRequiredMissing) + } + + return nil, nil + } + + str := strings.Split(param, delim) + floats := make([]float64, len(str)) + + for i, s := range str { + if v, err := strconv.ParseFloat(s, 64); err != nil { + return nil, err + } else { + floats[i] = v + } + } + + return floats, nil +} + +// parseFloat32ArrayParameter parses a string parameter containing array of values to []float32. +func parseFloat32ArrayParameter(param, delim string, required bool) ([]float32, error) { + if param == "" { + if required { + return nil, errors.New(errMsgRequiredMissing) + } + + return nil, nil + } + + str := strings.Split(param, delim) + floats := make([]float32, len(str)) + + for i, s := range str { + if v, err := strconv.ParseFloat(s, 32); err != nil { + return nil, err + } else { + floats[i] = float32(v) + } + } + + return floats, nil +} + + // parseInt64ArrayParameter parses a string parameter containing array of values to []int64. func parseInt64ArrayParameter(param, delim string, required bool) ([]int64, error) { if param == "" { diff --git a/samples/server/petstore/go-api-server/go/api_pet.go b/samples/server/petstore/go-api-server/go/api_pet.go index fb8041ee7301..53d99f9a3d8e 100644 --- a/samples/server/petstore/go-api-server/go/api_pet.go +++ b/samples/server/petstore/go-api-server/go/api_pet.go @@ -133,7 +133,6 @@ func (c *PetApiController) DeletePet(w http.ResponseWriter, r *http.Request) { c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - apiKeyParam := r.Header.Get("api_key") result, err := c.service.DeletePet(r.Context(), petIdParam, apiKeyParam) // If an error occurred, encode the error with the status code @@ -185,7 +184,6 @@ func (c *PetApiController) GetPetById(w http.ResponseWriter, r *http.Request) { c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - result, err := c.service.GetPetById(r.Context(), petIdParam) // If an error occurred, encode the error with the status code if err != nil { @@ -233,7 +231,6 @@ func (c *PetApiController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - nameParam := r.FormValue("name") statusParam := r.FormValue("status") result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam) @@ -259,7 +256,6 @@ func (c *PetApiController) UploadFile(w http.ResponseWriter, r *http.Request) { c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - additionalMetadataParam := r.FormValue("additionalMetadata") fileParam, err := ReadFormFileToTempFile(r, "file") diff --git a/samples/server/petstore/go-api-server/go/api_store.go b/samples/server/petstore/go-api-server/go/api_store.go index b0df49b92d31..a433e5273c28 100644 --- a/samples/server/petstore/go-api-server/go/api_store.go +++ b/samples/server/petstore/go-api-server/go/api_store.go @@ -81,7 +81,6 @@ func (c *StoreApiController) Routes() Routes { func (c *StoreApiController) DeleteOrder(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) orderIdParam := params["orderId"] - result, err := c.service.DeleteOrder(r.Context(), orderIdParam) // If an error occurred, encode the error with the status code if err != nil { @@ -114,7 +113,6 @@ func (c *StoreApiController) GetOrderById(w http.ResponseWriter, r *http.Request c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - result, err := c.service.GetOrderById(r.Context(), orderIdParam) // If an error occurred, encode the error with the status code if err != nil { diff --git a/samples/server/petstore/go-api-server/go/api_user.go b/samples/server/petstore/go-api-server/go/api_user.go index 5eb1f57d4bef..de6f0d9e245f 100644 --- a/samples/server/petstore/go-api-server/go/api_user.go +++ b/samples/server/petstore/go-api-server/go/api_user.go @@ -181,7 +181,6 @@ func (c *UserApiController) CreateUsersWithListInput(w http.ResponseWriter, r *h func (c *UserApiController) DeleteUser(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) usernameParam := params["username"] - result, err := c.service.DeleteUser(r.Context(), usernameParam) // If an error occurred, encode the error with the status code if err != nil { @@ -197,7 +196,6 @@ func (c *UserApiController) DeleteUser(w http.ResponseWriter, r *http.Request) { func (c *UserApiController) GetUserByName(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) usernameParam := params["username"] - result, err := c.service.GetUserByName(r.Context(), usernameParam) // If an error occurred, encode the error with the status code if err != nil { @@ -242,7 +240,6 @@ func (c *UserApiController) LogoutUser(w http.ResponseWriter, r *http.Request) { func (c *UserApiController) UpdateUser(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) usernameParam := params["username"] - userParam := User{} d := json.NewDecoder(r.Body) d.DisallowUnknownFields() diff --git a/samples/server/petstore/go-api-server/go/routers.go b/samples/server/petstore/go-api-server/go/routers.go index 6d4416f56542..5d63d0863a6f 100644 --- a/samples/server/petstore/go-api-server/go/routers.go +++ b/samples/server/petstore/go-api-server/go/routers.go @@ -139,8 +139,8 @@ func readFileHeaderToTempFile(fileHeader *multipart.FileHeader) (*os.File, error return file, nil } -// parseInt64Parameter parses a string parameter to an int64. -func parseInt64Parameter(param string, required bool) (int64, error) { +// parseFloatParameter parses a string parameter to an int64. +func parseFloatParameter(param string, bitSize int, required bool) (float64, error) { if param == "" { if required { return 0, errors.New(errMsgRequiredMissing) @@ -149,25 +149,42 @@ func parseInt64Parameter(param string, required bool) (int64, error) { return 0, nil } - return strconv.ParseInt(param, 10, 64) + return strconv.ParseFloat(param, bitSize) +} + +// parseFloat64Parameter parses a string parameter to an float64. +func parseFloat64Parameter(param string, required bool) (float64, error) { + return parseFloatParameter(param, 64, required) +} + +// parseFloat32Parameter parses a string parameter to an float32. +func parseFloat32Parameter(param string, required bool) (float32, error) { + val, err := parseFloatParameter(param, 32, required) + return float32(val), err +} + +// parseIntParameter parses a string parameter to an int64. +func parseIntParameter(param string, bitSize int, required bool) (int64, error) { + if param == "" { + if required { + return 0, errors.New(errMsgRequiredMissing) + } + + return 0, nil + } + + return strconv.ParseInt(param, 10, bitSize) +} + +// parseInt64Parameter parses a string parameter to an int64. +func parseInt64Parameter(param string, required bool) (int64, error) { + return parseIntParameter(param, 64, required) } // parseInt32Parameter parses a string parameter to an int32. func parseInt32Parameter(param string, required bool) (int32, error) { - if param == "" { - if required { - return 0, errors.New(errMsgRequiredMissing) - } - - return 0, nil - } - - val, err := strconv.ParseInt(param, 10, 32) - if err != nil { - return -1, err - } - - return int32(val), nil + val, err := parseIntParameter(param, 32, required) + return int32(val), err } // parseBoolParameter parses a string parameter to a bool @@ -188,6 +205,55 @@ func parseBoolParameter(param string, required bool) (bool, error) { return bool(val), nil } +// parseFloat64ArrayParameter parses a string parameter containing array of values to []Float64. +func parseFloat64ArrayParameter(param, delim string, required bool) ([]float64, error) { + if param == "" { + if required { + return nil, errors.New(errMsgRequiredMissing) + } + + return nil, nil + } + + str := strings.Split(param, delim) + floats := make([]float64, len(str)) + + for i, s := range str { + if v, err := strconv.ParseFloat(s, 64); err != nil { + return nil, err + } else { + floats[i] = v + } + } + + return floats, nil +} + +// parseFloat32ArrayParameter parses a string parameter containing array of values to []float32. +func parseFloat32ArrayParameter(param, delim string, required bool) ([]float32, error) { + if param == "" { + if required { + return nil, errors.New(errMsgRequiredMissing) + } + + return nil, nil + } + + str := strings.Split(param, delim) + floats := make([]float32, len(str)) + + for i, s := range str { + if v, err := strconv.ParseFloat(s, 32); err != nil { + return nil, err + } else { + floats[i] = float32(v) + } + } + + return floats, nil +} + + // parseInt64ArrayParameter parses a string parameter containing array of values to []int64. func parseInt64ArrayParameter(param, delim string, required bool) ([]int64, error) { if param == "" { diff --git a/samples/server/petstore/go-chi-server/go/api_pet.go b/samples/server/petstore/go-chi-server/go/api_pet.go index 2202804fb200..3483d83a3372 100644 --- a/samples/server/petstore/go-chi-server/go/api_pet.go +++ b/samples/server/petstore/go-chi-server/go/api_pet.go @@ -132,7 +132,6 @@ func (c *PetApiController) DeletePet(w http.ResponseWriter, r *http.Request) { c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - apiKeyParam := r.Header.Get("api_key") result, err := c.service.DeletePet(r.Context(), petIdParam, apiKeyParam) // If an error occurred, encode the error with the status code @@ -183,7 +182,6 @@ func (c *PetApiController) GetPetById(w http.ResponseWriter, r *http.Request) { c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - result, err := c.service.GetPetById(r.Context(), petIdParam) // If an error occurred, encode the error with the status code if err != nil { @@ -230,7 +228,6 @@ func (c *PetApiController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - nameParam := r.FormValue("name") statusParam := r.FormValue("status") result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam) @@ -255,7 +252,6 @@ func (c *PetApiController) UploadFile(w http.ResponseWriter, r *http.Request) { c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - additionalMetadataParam := r.FormValue("additionalMetadata") fileParam, err := ReadFormFileToTempFile(r, "file") diff --git a/samples/server/petstore/go-chi-server/go/api_store.go b/samples/server/petstore/go-chi-server/go/api_store.go index 67a30090afb3..a2badb302f40 100644 --- a/samples/server/petstore/go-chi-server/go/api_store.go +++ b/samples/server/petstore/go-chi-server/go/api_store.go @@ -80,7 +80,6 @@ func (c *StoreApiController) Routes() Routes { // DeleteOrder - Delete purchase order by ID func (c *StoreApiController) DeleteOrder(w http.ResponseWriter, r *http.Request) { orderIdParam := chi.URLParam(r, "orderId") - result, err := c.service.DeleteOrder(r.Context(), orderIdParam) // If an error occurred, encode the error with the status code if err != nil { @@ -112,7 +111,6 @@ func (c *StoreApiController) GetOrderById(w http.ResponseWriter, r *http.Request c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - result, err := c.service.GetOrderById(r.Context(), orderIdParam) // If an error occurred, encode the error with the status code if err != nil { diff --git a/samples/server/petstore/go-chi-server/go/api_user.go b/samples/server/petstore/go-chi-server/go/api_user.go index a48ab1c454a4..2fd697af177f 100644 --- a/samples/server/petstore/go-chi-server/go/api_user.go +++ b/samples/server/petstore/go-chi-server/go/api_user.go @@ -180,7 +180,6 @@ func (c *UserApiController) CreateUsersWithListInput(w http.ResponseWriter, r *h // DeleteUser - Delete user func (c *UserApiController) DeleteUser(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") - result, err := c.service.DeleteUser(r.Context(), usernameParam) // If an error occurred, encode the error with the status code if err != nil { @@ -195,7 +194,6 @@ func (c *UserApiController) DeleteUser(w http.ResponseWriter, r *http.Request) { // GetUserByName - Get user by user name func (c *UserApiController) GetUserByName(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") - result, err := c.service.GetUserByName(r.Context(), usernameParam) // If an error occurred, encode the error with the status code if err != nil { @@ -239,7 +237,6 @@ func (c *UserApiController) LogoutUser(w http.ResponseWriter, r *http.Request) { // UpdateUser - Updated user func (c *UserApiController) UpdateUser(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") - userParam := User{} d := json.NewDecoder(r.Body) d.DisallowUnknownFields() diff --git a/samples/server/petstore/go-chi-server/go/routers.go b/samples/server/petstore/go-chi-server/go/routers.go index 5f3463d18c07..e93532903a58 100644 --- a/samples/server/petstore/go-chi-server/go/routers.go +++ b/samples/server/petstore/go-chi-server/go/routers.go @@ -135,8 +135,8 @@ func readFileHeaderToTempFile(fileHeader *multipart.FileHeader) (*os.File, error return file, nil } -// parseInt64Parameter parses a string parameter to an int64. -func parseInt64Parameter(param string, required bool) (int64, error) { +// parseFloatParameter parses a string parameter to an int64. +func parseFloatParameter(param string, bitSize int, required bool) (float64, error) { if param == "" { if required { return 0, errors.New(errMsgRequiredMissing) @@ -145,25 +145,42 @@ func parseInt64Parameter(param string, required bool) (int64, error) { return 0, nil } - return strconv.ParseInt(param, 10, 64) + return strconv.ParseFloat(param, bitSize) +} + +// parseFloat64Parameter parses a string parameter to an float64. +func parseFloat64Parameter(param string, required bool) (float64, error) { + return parseFloatParameter(param, 64, required) +} + +// parseFloat32Parameter parses a string parameter to an float32. +func parseFloat32Parameter(param string, required bool) (float32, error) { + val, err := parseFloatParameter(param, 32, required) + return float32(val), err +} + +// parseIntParameter parses a string parameter to an int64. +func parseIntParameter(param string, bitSize int, required bool) (int64, error) { + if param == "" { + if required { + return 0, errors.New(errMsgRequiredMissing) + } + + return 0, nil + } + + return strconv.ParseInt(param, 10, bitSize) +} + +// parseInt64Parameter parses a string parameter to an int64. +func parseInt64Parameter(param string, required bool) (int64, error) { + return parseIntParameter(param, 64, required) } // parseInt32Parameter parses a string parameter to an int32. func parseInt32Parameter(param string, required bool) (int32, error) { - if param == "" { - if required { - return 0, errors.New(errMsgRequiredMissing) - } - - return 0, nil - } - - val, err := strconv.ParseInt(param, 10, 32) - if err != nil { - return -1, err - } - - return int32(val), nil + val, err := parseIntParameter(param, 32, required) + return int32(val), err } // parseBoolParameter parses a string parameter to a bool @@ -184,6 +201,55 @@ func parseBoolParameter(param string, required bool) (bool, error) { return bool(val), nil } +// parseFloat64ArrayParameter parses a string parameter containing array of values to []Float64. +func parseFloat64ArrayParameter(param, delim string, required bool) ([]float64, error) { + if param == "" { + if required { + return nil, errors.New(errMsgRequiredMissing) + } + + return nil, nil + } + + str := strings.Split(param, delim) + floats := make([]float64, len(str)) + + for i, s := range str { + if v, err := strconv.ParseFloat(s, 64); err != nil { + return nil, err + } else { + floats[i] = v + } + } + + return floats, nil +} + +// parseFloat32ArrayParameter parses a string parameter containing array of values to []float32. +func parseFloat32ArrayParameter(param, delim string, required bool) ([]float32, error) { + if param == "" { + if required { + return nil, errors.New(errMsgRequiredMissing) + } + + return nil, nil + } + + str := strings.Split(param, delim) + floats := make([]float32, len(str)) + + for i, s := range str { + if v, err := strconv.ParseFloat(s, 32); err != nil { + return nil, err + } else { + floats[i] = float32(v) + } + } + + return floats, nil +} + + // parseInt64ArrayParameter parses a string parameter containing array of values to []int64. func parseInt64ArrayParameter(param, delim string, required bool) ([]int64, error) { if param == "" { diff --git a/samples/server/petstore/go-server-required/go/api_pet.go b/samples/server/petstore/go-server-required/go/api_pet.go index 2202804fb200..3483d83a3372 100644 --- a/samples/server/petstore/go-server-required/go/api_pet.go +++ b/samples/server/petstore/go-server-required/go/api_pet.go @@ -132,7 +132,6 @@ func (c *PetApiController) DeletePet(w http.ResponseWriter, r *http.Request) { c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - apiKeyParam := r.Header.Get("api_key") result, err := c.service.DeletePet(r.Context(), petIdParam, apiKeyParam) // If an error occurred, encode the error with the status code @@ -183,7 +182,6 @@ func (c *PetApiController) GetPetById(w http.ResponseWriter, r *http.Request) { c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - result, err := c.service.GetPetById(r.Context(), petIdParam) // If an error occurred, encode the error with the status code if err != nil { @@ -230,7 +228,6 @@ func (c *PetApiController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - nameParam := r.FormValue("name") statusParam := r.FormValue("status") result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam) @@ -255,7 +252,6 @@ func (c *PetApiController) UploadFile(w http.ResponseWriter, r *http.Request) { c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - additionalMetadataParam := r.FormValue("additionalMetadata") fileParam, err := ReadFormFileToTempFile(r, "file") diff --git a/samples/server/petstore/go-server-required/go/api_store.go b/samples/server/petstore/go-server-required/go/api_store.go index 67a30090afb3..a2badb302f40 100644 --- a/samples/server/petstore/go-server-required/go/api_store.go +++ b/samples/server/petstore/go-server-required/go/api_store.go @@ -80,7 +80,6 @@ func (c *StoreApiController) Routes() Routes { // DeleteOrder - Delete purchase order by ID func (c *StoreApiController) DeleteOrder(w http.ResponseWriter, r *http.Request) { orderIdParam := chi.URLParam(r, "orderId") - result, err := c.service.DeleteOrder(r.Context(), orderIdParam) // If an error occurred, encode the error with the status code if err != nil { @@ -112,7 +111,6 @@ func (c *StoreApiController) GetOrderById(w http.ResponseWriter, r *http.Request c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - result, err := c.service.GetOrderById(r.Context(), orderIdParam) // If an error occurred, encode the error with the status code if err != nil { diff --git a/samples/server/petstore/go-server-required/go/api_user.go b/samples/server/petstore/go-server-required/go/api_user.go index a48ab1c454a4..2fd697af177f 100644 --- a/samples/server/petstore/go-server-required/go/api_user.go +++ b/samples/server/petstore/go-server-required/go/api_user.go @@ -180,7 +180,6 @@ func (c *UserApiController) CreateUsersWithListInput(w http.ResponseWriter, r *h // DeleteUser - Delete user func (c *UserApiController) DeleteUser(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") - result, err := c.service.DeleteUser(r.Context(), usernameParam) // If an error occurred, encode the error with the status code if err != nil { @@ -195,7 +194,6 @@ func (c *UserApiController) DeleteUser(w http.ResponseWriter, r *http.Request) { // GetUserByName - Get user by user name func (c *UserApiController) GetUserByName(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") - result, err := c.service.GetUserByName(r.Context(), usernameParam) // If an error occurred, encode the error with the status code if err != nil { @@ -239,7 +237,6 @@ func (c *UserApiController) LogoutUser(w http.ResponseWriter, r *http.Request) { // UpdateUser - Updated user func (c *UserApiController) UpdateUser(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") - userParam := User{} d := json.NewDecoder(r.Body) d.DisallowUnknownFields() diff --git a/samples/server/petstore/go-server-required/go/routers.go b/samples/server/petstore/go-server-required/go/routers.go index 5f3463d18c07..e93532903a58 100644 --- a/samples/server/petstore/go-server-required/go/routers.go +++ b/samples/server/petstore/go-server-required/go/routers.go @@ -135,8 +135,8 @@ func readFileHeaderToTempFile(fileHeader *multipart.FileHeader) (*os.File, error return file, nil } -// parseInt64Parameter parses a string parameter to an int64. -func parseInt64Parameter(param string, required bool) (int64, error) { +// parseFloatParameter parses a string parameter to an int64. +func parseFloatParameter(param string, bitSize int, required bool) (float64, error) { if param == "" { if required { return 0, errors.New(errMsgRequiredMissing) @@ -145,25 +145,42 @@ func parseInt64Parameter(param string, required bool) (int64, error) { return 0, nil } - return strconv.ParseInt(param, 10, 64) + return strconv.ParseFloat(param, bitSize) +} + +// parseFloat64Parameter parses a string parameter to an float64. +func parseFloat64Parameter(param string, required bool) (float64, error) { + return parseFloatParameter(param, 64, required) +} + +// parseFloat32Parameter parses a string parameter to an float32. +func parseFloat32Parameter(param string, required bool) (float32, error) { + val, err := parseFloatParameter(param, 32, required) + return float32(val), err +} + +// parseIntParameter parses a string parameter to an int64. +func parseIntParameter(param string, bitSize int, required bool) (int64, error) { + if param == "" { + if required { + return 0, errors.New(errMsgRequiredMissing) + } + + return 0, nil + } + + return strconv.ParseInt(param, 10, bitSize) +} + +// parseInt64Parameter parses a string parameter to an int64. +func parseInt64Parameter(param string, required bool) (int64, error) { + return parseIntParameter(param, 64, required) } // parseInt32Parameter parses a string parameter to an int32. func parseInt32Parameter(param string, required bool) (int32, error) { - if param == "" { - if required { - return 0, errors.New(errMsgRequiredMissing) - } - - return 0, nil - } - - val, err := strconv.ParseInt(param, 10, 32) - if err != nil { - return -1, err - } - - return int32(val), nil + val, err := parseIntParameter(param, 32, required) + return int32(val), err } // parseBoolParameter parses a string parameter to a bool @@ -184,6 +201,55 @@ func parseBoolParameter(param string, required bool) (bool, error) { return bool(val), nil } +// parseFloat64ArrayParameter parses a string parameter containing array of values to []Float64. +func parseFloat64ArrayParameter(param, delim string, required bool) ([]float64, error) { + if param == "" { + if required { + return nil, errors.New(errMsgRequiredMissing) + } + + return nil, nil + } + + str := strings.Split(param, delim) + floats := make([]float64, len(str)) + + for i, s := range str { + if v, err := strconv.ParseFloat(s, 64); err != nil { + return nil, err + } else { + floats[i] = v + } + } + + return floats, nil +} + +// parseFloat32ArrayParameter parses a string parameter containing array of values to []float32. +func parseFloat32ArrayParameter(param, delim string, required bool) ([]float32, error) { + if param == "" { + if required { + return nil, errors.New(errMsgRequiredMissing) + } + + return nil, nil + } + + str := strings.Split(param, delim) + floats := make([]float32, len(str)) + + for i, s := range str { + if v, err := strconv.ParseFloat(s, 32); err != nil { + return nil, err + } else { + floats[i] = float32(v) + } + } + + return floats, nil +} + + // parseInt64ArrayParameter parses a string parameter containing array of values to []int64. func parseInt64ArrayParameter(param, delim string, required bool) ([]int64, error) { if param == "" {