From eedde54410f5dd2bef42aede3e606dc7cf442e0f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 20 Oct 2026 03:03:13 +0000 Subject: [PATCH 1/2] fix(dev-server): regenerate API code for oapi-codegen 2.7.1 Dependabot PR #720 updated oapi-codegen from 2.4.1 to 2.7.1, but it did not regenerate server.gen.go. Regenerate the file with the pinned version. The new generated code calls runtime functions that first appear in github.com/oapi-codegen/runtime v1.4.0. Update the runtime to v1.4.2, which also fixes a required-parameter regression from oapi-codegen 2.7.0. The generator renamed two Go fields. Variation.Id is now UnderscoreId and Project.LastSyncedFromSource is now UnderscoreLastSyncedFromSource. Update the hand-written handlers to use the new names. The JSON tags ("_id" and "_lastSyncedFromSource") do not change. Co-authored-by: rniebla --- go.mod | 2 +- go.sum | 6 +- internal/dev_server/api/data_mapping.go | 8 +- internal/dev_server/api/get_project.go | 8 +- internal/dev_server/api/patch_project.go | 8 +- internal/dev_server/api/post_add_project.go | 8 +- .../dev_server/api/post_import_project.go | 10 +- internal/dev_server/api/server.gen.go | 430 +++++++++++++----- 8 files changed, 349 insertions(+), 131 deletions(-) diff --git a/go.mod b/go.mod index 498de3023..84dcba940 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/mitchellh/go-homedir v1.1.0 github.com/muesli/reflow v0.3.0 github.com/oapi-codegen/oapi-codegen/v2 v2.7.1 - github.com/oapi-codegen/runtime v1.1.2 + github.com/oapi-codegen/runtime v1.4.2 github.com/pelletier/go-toml/v2 v2.4.3 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c github.com/pkg/errors v0.9.1 diff --git a/go.sum b/go.sum index 507c52019..ecf9fc150 100644 --- a/go.sum +++ b/go.sum @@ -237,10 +237,12 @@ github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3 github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oapi-codegen/nullable v1.1.0 h1:eAh8JVc5430VtYVnq00Hrbpag9PFRGWLjxR1/3KntMs= +github.com/oapi-codegen/nullable v1.1.0/go.mod h1:KUZ3vUzkmEKY90ksAmit2+5juDIhIZhfDl+0PwOQlFY= github.com/oapi-codegen/oapi-codegen/v2 v2.7.1 h1:a7Ab7YlpqkVG5HKrTaeFstm32Z5QOnyjnbsCO0jiMYM= github.com/oapi-codegen/oapi-codegen/v2 v2.7.1/go.mod h1:qzFy6iuobJw/hD1aRILee4G87/ShmhR0xYCwcUtZMCw= -github.com/oapi-codegen/runtime v1.1.2 h1:P2+CubHq8fO4Q6fV1tqDBZHCwpVpvPg7oKiYzQgXIyI= -github.com/oapi-codegen/runtime v1.1.2/go.mod h1:SK9X900oXmPWilYR5/WKPzt3Kqxn/uS/+lbpREv+eCg= +github.com/oapi-codegen/runtime v1.4.2 h1:GMxFVYLzoYLua+/KvzgSphkyK1lLTReQI9Vf4hvATKE= +github.com/oapi-codegen/runtime v1.4.2/go.mod h1:GwV7hC2hviaMzj+ITfHVRESK5J2W/GefVwIND/bMGvU= github.com/oasdiff/yaml v0.1.1 h1:6nHx+pn9gBRM6YpBlFZFQGCCd1nuvqOBtTD3KKTgGxY= github.com/oasdiff/yaml v0.1.1/go.mod h1:EYJNoyktvWMJ0Hmhx+6qTaqMOsalUaRGT8Sj1hNcegU= github.com/oasdiff/yaml3 v0.0.14 h1:aLJee3hxBK2H5wdXd9iPcIXb93Nty1Ge0pT171eHtkw= diff --git a/internal/dev_server/api/data_mapping.go b/internal/dev_server/api/data_mapping.go index 57aead5b4..c5302a136 100644 --- a/internal/dev_server/api/data_mapping.go +++ b/internal/dev_server/api/data_mapping.go @@ -8,10 +8,10 @@ func availableVariationsToResponseFormat(availableVariations map[string][]model. respVariationsForFlag := make([]Variation, 0, len(variationsForFlag)) for _, variation := range variationsForFlag { respVariationsForFlag = append(respVariationsForFlag, Variation{ - Id: variation.Id, - Description: variation.Description, - Name: variation.Name, - Value: variation.Value, + UnderscoreId: variation.Id, + Description: variation.Description, + Name: variation.Name, + Value: variation.Value, }) } respAvailableVariations[flagKey] = respVariationsForFlag diff --git a/internal/dev_server/api/get_project.go b/internal/dev_server/api/get_project.go index d54591f95..46c00bd00 100644 --- a/internal/dev_server/api/get_project.go +++ b/internal/dev_server/api/get_project.go @@ -17,10 +17,10 @@ func (s server) GetProject(ctx context.Context, request GetProjectRequestObject) } response := ProjectJSONResponse{ - LastSyncedFromSource: project.LastSyncTime.Unix(), - Context: project.Context, - SourceEnvironmentKey: project.SourceEnvironmentKey, - FlagsState: &project.AllFlagsState, + UnderscoreLastSyncedFromSource: project.LastSyncTime.Unix(), + Context: project.Context, + SourceEnvironmentKey: project.SourceEnvironmentKey, + FlagsState: &project.AllFlagsState, } if request.Params.Expand != nil { diff --git a/internal/dev_server/api/patch_project.go b/internal/dev_server/api/patch_project.go index 49e25c9e2..84423c518 100644 --- a/internal/dev_server/api/patch_project.go +++ b/internal/dev_server/api/patch_project.go @@ -21,10 +21,10 @@ func (s server) PatchProject(ctx context.Context, request PatchProjectRequestObj } response := ProjectJSONResponse{ - LastSyncedFromSource: project.LastSyncTime.Unix(), - Context: project.Context, - SourceEnvironmentKey: project.SourceEnvironmentKey, - FlagsState: &project.AllFlagsState, + UnderscoreLastSyncedFromSource: project.LastSyncTime.Unix(), + Context: project.Context, + SourceEnvironmentKey: project.SourceEnvironmentKey, + FlagsState: &project.AllFlagsState, } if request.Params.Expand != nil { diff --git a/internal/dev_server/api/post_add_project.go b/internal/dev_server/api/post_add_project.go index a076bbc41..7dc71b164 100644 --- a/internal/dev_server/api/post_add_project.go +++ b/internal/dev_server/api/post_add_project.go @@ -35,10 +35,10 @@ func (s server) PostAddProject(ctx context.Context, request PostAddProjectReques } response := ProjectJSONResponse{ - LastSyncedFromSource: project.LastSyncTime.Unix(), - Context: project.Context, - SourceEnvironmentKey: project.SourceEnvironmentKey, - FlagsState: &project.AllFlagsState, + UnderscoreLastSyncedFromSource: project.LastSyncTime.Unix(), + Context: project.Context, + SourceEnvironmentKey: project.SourceEnvironmentKey, + FlagsState: &project.AllFlagsState, } if request.Params.Expand != nil { diff --git a/internal/dev_server/api/post_import_project.go b/internal/dev_server/api/post_import_project.go index 37470bc5a..eed235faa 100644 --- a/internal/dev_server/api/post_import_project.go +++ b/internal/dev_server/api/post_import_project.go @@ -42,7 +42,7 @@ func (s server) PostImportProject(ctx context.Context, request PostImportProject for flagKey, vars := range *request.Body.AvailableVariations { for _, v := range vars { variations[flagKey] = append(variations[flagKey], model.ImportVariation{ - Id: v.Id, + Id: v.UnderscoreId, Name: v.Name, Description: v.Description, Value: v.Value, @@ -72,10 +72,10 @@ func (s server) PostImportProject(ctx context.Context, request PostImportProject } response := ProjectJSONResponse{ - LastSyncedFromSource: project.LastSyncTime.Unix(), - Context: project.Context, - SourceEnvironmentKey: project.SourceEnvironmentKey, - FlagsState: &project.AllFlagsState, + UnderscoreLastSyncedFromSource: project.LastSyncTime.Unix(), + Context: project.Context, + SourceEnvironmentKey: project.SourceEnvironmentKey, + FlagsState: &project.AllFlagsState, } return PostImportProject201JSONResponse{response}, nil diff --git a/internal/dev_server/api/server.gen.go b/internal/dev_server/api/server.gen.go index 02c269078..6ce5f7f55 100644 --- a/internal/dev_server/api/server.gen.go +++ b/internal/dev_server/api/server.gen.go @@ -1,11 +1,13 @@ // Package api provides primitives to interact with the openapi HTTP API. // -// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.4.1 DO NOT EDIT. +// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.7.1 DO NOT EDIT. package api import ( + "bytes" "context" "encoding/json" + "errors" "fmt" "io" "net/http" @@ -16,7 +18,6 @@ import ( "github.com/launchdarkly/go-sdk-common/v3/ldvalue" "github.com/launchdarkly/ldcli/internal/dev_server/model" "github.com/oapi-codegen/runtime" - strictnethttp "github.com/oapi-codegen/runtime/strictmiddleware/nethttp" ) // Defines values for GetProjectParamsExpand. @@ -25,18 +26,54 @@ const ( GetProjectParamsExpandOverrides GetProjectParamsExpand = "overrides" ) +// Valid indicates whether the value is a known member of the GetProjectParamsExpand enum. +func (e GetProjectParamsExpand) Valid() bool { + switch e { + case GetProjectParamsExpandAvailableVariations: + return true + case GetProjectParamsExpandOverrides: + return true + default: + return false + } +} + // Defines values for PatchProjectParamsExpand. const ( PatchProjectParamsExpandAvailableVariations PatchProjectParamsExpand = "availableVariations" PatchProjectParamsExpandOverrides PatchProjectParamsExpand = "overrides" ) +// Valid indicates whether the value is a known member of the PatchProjectParamsExpand enum. +func (e PatchProjectParamsExpand) Valid() bool { + switch e { + case PatchProjectParamsExpandAvailableVariations: + return true + case PatchProjectParamsExpandOverrides: + return true + default: + return false + } +} + // Defines values for PostAddProjectParamsExpand. const ( AvailableVariations PostAddProjectParamsExpand = "availableVariations" Overrides PostAddProjectParamsExpand = "overrides" ) +// Valid indicates whether the value is a known member of the PostAddProjectParamsExpand enum. +func (e PostAddProjectParamsExpand) Valid() bool { + switch e { + case AvailableVariations: + return true + case Overrides: + return true + default: + return false + } +} + // Context context object to use when evaluating flags in source environment type Context = ldcontext.Context @@ -102,8 +139,8 @@ type FlagValue = ldvalue.Value // Project Project type Project struct { - // LastSyncedFromSource unix timestamp for the lat time the flag values were synced from the source environment - LastSyncedFromSource int64 `json:"_lastSyncedFromSource"` + // UnderscoreLastSyncedFromSource unix timestamp for the lat time the flag values were synced from the source environment + UnderscoreLastSyncedFromSource int64 `json:"_lastSyncedFromSource"` // AvailableVariations variations AvailableVariations *map[string][]Variation `json:"availableVariations,omitempty"` @@ -123,9 +160,9 @@ type Project struct { // Variation variation of a flag type Variation struct { - Id string `json:"_id"` - Description *string `json:"description,omitempty"` - Name *string `json:"name,omitempty"` + UnderscoreId string `json:"_id"` + Description *string `json:"description,omitempty"` + Name *string `json:"name,omitempty"` // Value value of a feature flag variation Value FlagValue `json:"value"` @@ -335,23 +372,34 @@ func (siw *ServerInterfaceWrapper) RestoreBackup(w http.ResponseWriter, r *http. func (siw *ServerInterfaceWrapper) GetDebugSessions(w http.ResponseWriter, r *http.Request) { var err error + _ = err // Parameter object where we will unmarshal all parameters from the context var params GetDebugSessionsParams // ------------- Optional query parameter "limit" ------------- - err = runtime.BindQueryParameter("form", true, false, "limit", r.URL.Query(), ¶ms.Limit) + err = runtime.BindQueryParameterWithOptions("form", true, false, "limit", r.URL.Query(), ¶ms.Limit, runtime.BindQueryParameterOptions{Type: "integer", Format: ""}) if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "limit", Err: err}) + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "limit"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "limit", Err: err}) + } return } // ------------- Optional query parameter "offset" ------------- - err = runtime.BindQueryParameter("form", true, false, "offset", r.URL.Query(), ¶ms.Offset) + err = runtime.BindQueryParameterWithOptions("form", true, false, "offset", r.URL.Query(), ¶ms.Offset, runtime.BindQueryParameterOptions{Type: "integer", Format: ""}) if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "offset", Err: err}) + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "offset"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "offset", Err: err}) + } return } @@ -370,11 +418,12 @@ func (siw *ServerInterfaceWrapper) GetDebugSessions(w http.ResponseWriter, r *ht func (siw *ServerInterfaceWrapper) DeleteDebugSession(w http.ResponseWriter, r *http.Request) { var err error + _ = err // ------------- Path parameter "debugSessionKey" ------------- var debugSessionKey string - err = runtime.BindStyledParameterWithOptions("simple", "debugSessionKey", mux.Vars(r)["debugSessionKey"], &debugSessionKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "debugSessionKey", mux.Vars(r)["debugSessionKey"], &debugSessionKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "debugSessionKey", Err: err}) return @@ -395,11 +444,12 @@ func (siw *ServerInterfaceWrapper) DeleteDebugSession(w http.ResponseWriter, r * func (siw *ServerInterfaceWrapper) GetDebugSessionEvents(w http.ResponseWriter, r *http.Request) { var err error + _ = err // ------------- Path parameter "debugSessionKey" ------------- var debugSessionKey string - err = runtime.BindStyledParameterWithOptions("simple", "debugSessionKey", mux.Vars(r)["debugSessionKey"], &debugSessionKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "debugSessionKey", mux.Vars(r)["debugSessionKey"], &debugSessionKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "debugSessionKey", Err: err}) return @@ -410,25 +460,40 @@ func (siw *ServerInterfaceWrapper) GetDebugSessionEvents(w http.ResponseWriter, // ------------- Optional query parameter "kind" ------------- - err = runtime.BindQueryParameter("form", true, false, "kind", r.URL.Query(), ¶ms.Kind) + err = runtime.BindQueryParameterWithOptions("form", true, false, "kind", r.URL.Query(), ¶ms.Kind, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "kind", Err: err}) + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "kind"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "kind", Err: err}) + } return } // ------------- Optional query parameter "limit" ------------- - err = runtime.BindQueryParameter("form", true, false, "limit", r.URL.Query(), ¶ms.Limit) + err = runtime.BindQueryParameterWithOptions("form", true, false, "limit", r.URL.Query(), ¶ms.Limit, runtime.BindQueryParameterOptions{Type: "integer", Format: ""}) if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "limit", Err: err}) + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "limit"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "limit", Err: err}) + } return } // ------------- Optional query parameter "offset" ------------- - err = runtime.BindQueryParameter("form", true, false, "offset", r.URL.Query(), ¶ms.Offset) + err = runtime.BindQueryParameterWithOptions("form", true, false, "offset", r.URL.Query(), ¶ms.Offset, runtime.BindQueryParameterOptions{Type: "integer", Format: ""}) if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "offset", Err: err}) + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "offset"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "offset", Err: err}) + } return } @@ -461,11 +526,12 @@ func (siw *ServerInterfaceWrapper) GetProjects(w http.ResponseWriter, r *http.Re func (siw *ServerInterfaceWrapper) DeleteProject(w http.ResponseWriter, r *http.Request) { var err error + _ = err // ------------- Path parameter "projectKey" ------------- var projectKey ProjectKey - err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "projectKey", Err: err}) return @@ -486,11 +552,12 @@ func (siw *ServerInterfaceWrapper) DeleteProject(w http.ResponseWriter, r *http. func (siw *ServerInterfaceWrapper) GetProject(w http.ResponseWriter, r *http.Request) { var err error + _ = err // ------------- Path parameter "projectKey" ------------- var projectKey ProjectKey - err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "projectKey", Err: err}) return @@ -501,9 +568,14 @@ func (siw *ServerInterfaceWrapper) GetProject(w http.ResponseWriter, r *http.Req // ------------- Optional query parameter "expand" ------------- - err = runtime.BindQueryParameter("form", true, false, "expand", r.URL.Query(), ¶ms.Expand) + err = runtime.BindQueryParameterWithOptions("form", true, false, "expand", r.URL.Query(), ¶ms.Expand, runtime.BindQueryParameterOptions{Type: "array", Format: ""}) if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "expand", Err: err}) + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "expand"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "expand", Err: err}) + } return } @@ -522,11 +594,12 @@ func (siw *ServerInterfaceWrapper) GetProject(w http.ResponseWriter, r *http.Req func (siw *ServerInterfaceWrapper) PatchProject(w http.ResponseWriter, r *http.Request) { var err error + _ = err // ------------- Path parameter "projectKey" ------------- var projectKey ProjectKey - err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "projectKey", Err: err}) return @@ -537,9 +610,14 @@ func (siw *ServerInterfaceWrapper) PatchProject(w http.ResponseWriter, r *http.R // ------------- Optional query parameter "expand" ------------- - err = runtime.BindQueryParameter("form", true, false, "expand", r.URL.Query(), ¶ms.Expand) + err = runtime.BindQueryParameterWithOptions("form", true, false, "expand", r.URL.Query(), ¶ms.Expand, runtime.BindQueryParameterOptions{Type: "array", Format: ""}) if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "expand", Err: err}) + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "expand"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "expand", Err: err}) + } return } @@ -558,11 +636,12 @@ func (siw *ServerInterfaceWrapper) PatchProject(w http.ResponseWriter, r *http.R func (siw *ServerInterfaceWrapper) PostAddProject(w http.ResponseWriter, r *http.Request) { var err error + _ = err // ------------- Path parameter "projectKey" ------------- var projectKey ProjectKey - err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "projectKey", Err: err}) return @@ -573,9 +652,14 @@ func (siw *ServerInterfaceWrapper) PostAddProject(w http.ResponseWriter, r *http // ------------- Optional query parameter "expand" ------------- - err = runtime.BindQueryParameter("form", true, false, "expand", r.URL.Query(), ¶ms.Expand) + err = runtime.BindQueryParameterWithOptions("form", true, false, "expand", r.URL.Query(), ¶ms.Expand, runtime.BindQueryParameterOptions{Type: "array", Format: ""}) if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "expand", Err: err}) + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "expand"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "expand", Err: err}) + } return } @@ -594,11 +678,12 @@ func (siw *ServerInterfaceWrapper) PostAddProject(w http.ResponseWriter, r *http func (siw *ServerInterfaceWrapper) GetEnvironments(w http.ResponseWriter, r *http.Request) { var err error + _ = err // ------------- Path parameter "projectKey" ------------- var projectKey ProjectKey - err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "projectKey", Err: err}) return @@ -609,17 +694,27 @@ func (siw *ServerInterfaceWrapper) GetEnvironments(w http.ResponseWriter, r *htt // ------------- Optional query parameter "name" ------------- - err = runtime.BindQueryParameter("form", true, false, "name", r.URL.Query(), ¶ms.Name) + err = runtime.BindQueryParameterWithOptions("form", true, false, "name", r.URL.Query(), ¶ms.Name, runtime.BindQueryParameterOptions{Type: "string", Format: ""}) if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "name", Err: err}) + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "name"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "name", Err: err}) + } return } // ------------- Optional query parameter "limit" ------------- - err = runtime.BindQueryParameter("form", true, false, "limit", r.URL.Query(), ¶ms.Limit) + err = runtime.BindQueryParameterWithOptions("form", true, false, "limit", r.URL.Query(), ¶ms.Limit, runtime.BindQueryParameterOptions{Type: "integer", Format: ""}) if err != nil { - siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "limit", Err: err}) + var requiredError *runtime.RequiredParameterError + if errors.As(err, &requiredError) { + siw.ErrorHandlerFunc(w, r, &RequiredParamError{ParamName: "limit"}) + } else { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "limit", Err: err}) + } return } @@ -638,11 +733,12 @@ func (siw *ServerInterfaceWrapper) GetEnvironments(w http.ResponseWriter, r *htt func (siw *ServerInterfaceWrapper) PostImportProject(w http.ResponseWriter, r *http.Request) { var err error + _ = err // ------------- Path parameter "projectKey" ------------- var projectKey ProjectKey - err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "projectKey", Err: err}) return @@ -663,11 +759,12 @@ func (siw *ServerInterfaceWrapper) PostImportProject(w http.ResponseWriter, r *h func (siw *ServerInterfaceWrapper) DeleteOverrides(w http.ResponseWriter, r *http.Request) { var err error + _ = err // ------------- Path parameter "projectKey" ------------- var projectKey ProjectKey - err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "projectKey", Err: err}) return @@ -688,11 +785,12 @@ func (siw *ServerInterfaceWrapper) DeleteOverrides(w http.ResponseWriter, r *htt func (siw *ServerInterfaceWrapper) DeleteFlagOverride(w http.ResponseWriter, r *http.Request) { var err error + _ = err // ------------- Path parameter "projectKey" ------------- var projectKey ProjectKey - err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "projectKey", Err: err}) return @@ -701,7 +799,7 @@ func (siw *ServerInterfaceWrapper) DeleteFlagOverride(w http.ResponseWriter, r * // ------------- Path parameter "flagKey" ------------- var flagKey FlagKey - err = runtime.BindStyledParameterWithOptions("simple", "flagKey", mux.Vars(r)["flagKey"], &flagKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "flagKey", mux.Vars(r)["flagKey"], &flagKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "flagKey", Err: err}) return @@ -722,11 +820,12 @@ func (siw *ServerInterfaceWrapper) DeleteFlagOverride(w http.ResponseWriter, r * func (siw *ServerInterfaceWrapper) PutOverrideFlag(w http.ResponseWriter, r *http.Request) { var err error + _ = err // ------------- Path parameter "projectKey" ------------- var projectKey ProjectKey - err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "projectKey", mux.Vars(r)["projectKey"], &projectKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "projectKey", Err: err}) return @@ -735,7 +834,7 @@ func (siw *ServerInterfaceWrapper) PutOverrideFlag(w http.ResponseWriter, r *htt // ------------- Path parameter "flagKey" ------------- var flagKey FlagKey - err = runtime.BindStyledParameterWithOptions("simple", "flagKey", mux.Vars(r)["flagKey"], &flagKey, runtime.BindStyledParameterOptions{Explode: false, Required: true}) + err = runtime.BindStyledParameterWithOptions("simple", "flagKey", mux.Vars(r)["flagKey"], &flagKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: ""}) if err != nil { siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "flagKey", Err: err}) return @@ -865,35 +964,35 @@ func HandlerWithOptions(si ServerInterface, options GorillaServerOptions) http.H ErrorHandlerFunc: options.ErrorHandlerFunc, } - r.HandleFunc(options.BaseURL+"/backup", wrapper.GetBackup).Methods("GET") + r.HandleFunc(options.BaseURL+"/backup", wrapper.GetBackup).Methods(http.MethodGet) - r.HandleFunc(options.BaseURL+"/backup", wrapper.RestoreBackup).Methods("POST") + r.HandleFunc(options.BaseURL+"/backup", wrapper.RestoreBackup).Methods(http.MethodPost) - r.HandleFunc(options.BaseURL+"/debug-sessions", wrapper.GetDebugSessions).Methods("GET") + r.HandleFunc(options.BaseURL+"/debug-sessions", wrapper.GetDebugSessions).Methods(http.MethodGet) - r.HandleFunc(options.BaseURL+"/debug-sessions/{debugSessionKey}", wrapper.DeleteDebugSession).Methods("DELETE") + r.HandleFunc(options.BaseURL+"/debug-sessions/{debugSessionKey}", wrapper.DeleteDebugSession).Methods(http.MethodDelete) - r.HandleFunc(options.BaseURL+"/debug-sessions/{debugSessionKey}/events", wrapper.GetDebugSessionEvents).Methods("GET") + r.HandleFunc(options.BaseURL+"/debug-sessions/{debugSessionKey}/events", wrapper.GetDebugSessionEvents).Methods(http.MethodGet) - r.HandleFunc(options.BaseURL+"/projects", wrapper.GetProjects).Methods("GET") + r.HandleFunc(options.BaseURL+"/projects", wrapper.GetProjects).Methods(http.MethodGet) - r.HandleFunc(options.BaseURL+"/projects/{projectKey}", wrapper.DeleteProject).Methods("DELETE") + r.HandleFunc(options.BaseURL+"/projects/{projectKey}", wrapper.DeleteProject).Methods(http.MethodDelete) - r.HandleFunc(options.BaseURL+"/projects/{projectKey}", wrapper.GetProject).Methods("GET") + r.HandleFunc(options.BaseURL+"/projects/{projectKey}", wrapper.GetProject).Methods(http.MethodGet) - r.HandleFunc(options.BaseURL+"/projects/{projectKey}", wrapper.PatchProject).Methods("PATCH") + r.HandleFunc(options.BaseURL+"/projects/{projectKey}", wrapper.PatchProject).Methods(http.MethodPatch) - r.HandleFunc(options.BaseURL+"/projects/{projectKey}", wrapper.PostAddProject).Methods("POST") + r.HandleFunc(options.BaseURL+"/projects/{projectKey}", wrapper.PostAddProject).Methods(http.MethodPost) - r.HandleFunc(options.BaseURL+"/projects/{projectKey}/environments", wrapper.GetEnvironments).Methods("GET") + r.HandleFunc(options.BaseURL+"/projects/{projectKey}/environments", wrapper.GetEnvironments).Methods(http.MethodGet) - r.HandleFunc(options.BaseURL+"/projects/{projectKey}/import", wrapper.PostImportProject).Methods("POST") + r.HandleFunc(options.BaseURL+"/projects/{projectKey}/import", wrapper.PostImportProject).Methods(http.MethodPost) - r.HandleFunc(options.BaseURL+"/projects/{projectKey}/overrides", wrapper.DeleteOverrides).Methods("DELETE") + r.HandleFunc(options.BaseURL+"/projects/{projectKey}/overrides", wrapper.DeleteOverrides).Methods(http.MethodDelete) - r.HandleFunc(options.BaseURL+"/projects/{projectKey}/overrides/{flagKey}", wrapper.DeleteFlagOverride).Methods("DELETE") + r.HandleFunc(options.BaseURL+"/projects/{projectKey}/overrides/{flagKey}", wrapper.DeleteFlagOverride).Methods(http.MethodDelete) - r.HandleFunc(options.BaseURL+"/projects/{projectKey}/overrides/{flagKey}", wrapper.PutOverrideFlag).Methods("PUT") + r.HandleFunc(options.BaseURL+"/projects/{projectKey}/overrides/{flagKey}", wrapper.PutOverrideFlag).Methods(http.MethodPut) return r } @@ -934,6 +1033,7 @@ type GetBackup200ApplicationvndSqlite3Response struct { } func (response GetBackup200ApplicationvndSqlite3Response) VisitGetBackupResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/vnd.sqlite3") if response.ContentLength != 0 { w.Header().Set("Content-Length", fmt.Sprint(response.ContentLength)) @@ -974,19 +1074,29 @@ type GetDebugSessionsResponseObject interface { type GetDebugSessions200JSONResponse DebugSessionsPage func (response GetDebugSessions200JSONResponse) VisitGetDebugSessionsResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type GetDebugSessions400JSONResponse struct{ ErrorResponseJSONResponse } func (response GetDebugSessions400JSONResponse) VisitGetDebugSessionsResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(400) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type DeleteDebugSessionRequestObject struct { @@ -1008,10 +1118,15 @@ func (response DeleteDebugSession204Response) VisitDeleteDebugSessionResponse(w type DeleteDebugSession404JSONResponse struct{ ErrorResponseJSONResponse } func (response DeleteDebugSession404JSONResponse) VisitDeleteDebugSessionResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type GetDebugSessionEventsRequestObject struct { @@ -1026,19 +1141,29 @@ type GetDebugSessionEventsResponseObject interface { type GetDebugSessionEvents200JSONResponse EventsPage func (response GetDebugSessionEvents200JSONResponse) VisitGetDebugSessionEventsResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type GetDebugSessionEvents400JSONResponse struct{ ErrorResponseJSONResponse } func (response GetDebugSessionEvents400JSONResponse) VisitGetDebugSessionEventsResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(400) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type GetDebugSessionEvents404JSONResponse struct { @@ -1050,10 +1175,15 @@ type GetDebugSessionEvents404JSONResponse struct { } func (response GetDebugSessionEvents404JSONResponse) VisitGetDebugSessionEventsResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type GetProjectsRequestObject struct { @@ -1066,10 +1196,15 @@ type GetProjectsResponseObject interface { type GetProjects200JSONResponse []string func (response GetProjects200JSONResponse) VisitGetProjectsResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type DeleteProjectRequestObject struct { @@ -1091,10 +1226,15 @@ func (response DeleteProject204Response) VisitDeleteProjectResponse(w http.Respo type DeleteProject404JSONResponse struct{ ErrorResponseJSONResponse } func (response DeleteProject404JSONResponse) VisitDeleteProjectResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type GetProjectRequestObject struct { @@ -1109,10 +1249,15 @@ type GetProjectResponseObject interface { type GetProject200JSONResponse struct{ ProjectJSONResponse } func (response GetProject200JSONResponse) VisitGetProjectResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type GetProject404Response struct { @@ -1136,10 +1281,15 @@ type PatchProjectResponseObject interface { type PatchProject200JSONResponse struct{ ProjectJSONResponse } func (response PatchProject200JSONResponse) VisitPatchProjectResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type PatchProject404Response struct { @@ -1163,19 +1313,29 @@ type PostAddProjectResponseObject interface { type PostAddProject201JSONResponse struct{ ProjectJSONResponse } func (response PostAddProject201JSONResponse) VisitPostAddProjectResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(201) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type PostAddProject400JSONResponse struct{ ErrorResponseJSONResponse } func (response PostAddProject400JSONResponse) VisitPostAddProjectResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(400) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type PostAddProject409JSONResponse struct { @@ -1187,10 +1347,15 @@ type PostAddProject409JSONResponse struct { } func (response PostAddProject409JSONResponse) VisitPostAddProjectResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(409) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type GetEnvironmentsRequestObject struct { @@ -1205,19 +1370,29 @@ type GetEnvironmentsResponseObject interface { type GetEnvironments200JSONResponse []Environment func (response GetEnvironments200JSONResponse) VisitGetEnvironmentsResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type GetEnvironments400JSONResponse struct{ ErrorResponseJSONResponse } func (response GetEnvironments400JSONResponse) VisitGetEnvironmentsResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(400) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type GetEnvironments404JSONResponse struct { @@ -1229,10 +1404,15 @@ type GetEnvironments404JSONResponse struct { } func (response GetEnvironments404JSONResponse) VisitGetEnvironmentsResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type PostImportProjectRequestObject struct { @@ -1247,19 +1427,29 @@ type PostImportProjectResponseObject interface { type PostImportProject201JSONResponse struct{ ProjectJSONResponse } func (response PostImportProject201JSONResponse) VisitPostImportProjectResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(201) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type PostImportProject400JSONResponse struct{ ErrorResponseJSONResponse } func (response PostImportProject400JSONResponse) VisitPostImportProjectResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(400) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type PostImportProject409JSONResponse struct { @@ -1271,10 +1461,15 @@ type PostImportProject409JSONResponse struct { } func (response PostImportProject409JSONResponse) VisitPostImportProjectResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(409) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type DeleteOverridesRequestObject struct { @@ -1296,10 +1491,15 @@ func (response DeleteOverrides204Response) VisitDeleteOverridesResponse(w http.R type DeleteOverrides404JSONResponse struct{ ErrorResponseJSONResponse } func (response DeleteOverrides404JSONResponse) VisitDeleteOverridesResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(404) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type DeleteFlagOverrideRequestObject struct { @@ -1340,19 +1540,29 @@ type PutOverrideFlagResponseObject interface { type PutOverrideFlag200JSONResponse struct{ FlagOverrideJSONResponse } func (response PutOverrideFlag200JSONResponse) VisitPutOverrideFlagResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } type PutOverrideFlag400JSONResponse struct{ ErrorResponseJSONResponse } func (response PutOverrideFlag400JSONResponse) VisitPutOverrideFlagResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } w.Header().Set("Content-Type", "application/json") w.WriteHeader(400) - - return json.NewEncoder(w).Encode(response) + _, err := buf.WriteTo(w) + return err } // StrictServerInterface represents all server handlers. @@ -1404,8 +1614,8 @@ type StrictServerInterface interface { PutOverrideFlag(ctx context.Context, request PutOverrideFlagRequestObject) (PutOverrideFlagResponseObject, error) } -type StrictHandlerFunc = strictnethttp.StrictHTTPHandlerFunc -type StrictMiddlewareFunc = strictnethttp.StrictHTTPMiddlewareFunc +type StrictHandlerFunc func(ctx context.Context, w http.ResponseWriter, r *http.Request, request any) (any, error) +type StrictMiddlewareFunc func(f StrictHandlerFunc, operationID string) StrictHandlerFunc type StrictHTTPServerOptions struct { RequestErrorHandlerFunc func(w http.ResponseWriter, r *http.Request, err error) @@ -1648,10 +1858,13 @@ func (sh *strictHandler) PatchProject(w http.ResponseWriter, r *http.Request, pr var body PatchProjectJSONRequestBody if err := json.NewDecoder(r.Body).Decode(&body); err != nil { - sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) - return + if !errors.Is(err, io.EOF) { + sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) + return + } + } else { + request.Body = &body } - request.Body = &body handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, request interface{}) (interface{}, error) { return sh.ssi.PatchProject(ctx, request.(PatchProjectRequestObject)) @@ -1682,10 +1895,13 @@ func (sh *strictHandler) PostAddProject(w http.ResponseWriter, r *http.Request, var body PostAddProjectJSONRequestBody if err := json.NewDecoder(r.Body).Decode(&body); err != nil { - sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) - return + if !errors.Is(err, io.EOF) { + sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) + return + } + } else { + request.Body = &body } - request.Body = &body handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, request interface{}) (interface{}, error) { return sh.ssi.PostAddProject(ctx, request.(PostAddProjectRequestObject)) From ec4f4cbb3161ca52176cbf207c88585132baf0b5 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 20 Oct 2026 03:03:17 +0000 Subject: [PATCH 2/2] fix(dev-server): mark project request bodies as required oapi-codegen 2.7 accepts an empty body for an optional request body and sends a nil Body to the handler. PatchProject and PostAddProject read request.Body without a nil check, so an empty body caused a panic. Mark these request bodies as required in api.yaml. The generated code then returns the same 400 error for an empty body as before. Co-authored-by: rniebla --- internal/dev_server/api/api.yaml | 2 ++ internal/dev_server/api/server.gen.go | 18 ++++++------------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/internal/dev_server/api/api.yaml b/internal/dev_server/api/api.yaml index cc62585a7..34cc73f8e 100644 --- a/internal/dev_server/api/api.yaml +++ b/internal/dev_server/api/api.yaml @@ -62,6 +62,7 @@ paths: - $ref: "#/components/parameters/projectKey" - $ref: "#/components/parameters/projectExpand" requestBody: + required: true content: application/json: schema: @@ -94,6 +95,7 @@ paths: - $ref: "#/components/parameters/projectKey" - $ref: "#/components/parameters/projectExpand" requestBody: + required: true content: application/json: schema: diff --git a/internal/dev_server/api/server.gen.go b/internal/dev_server/api/server.gen.go index 6ce5f7f55..5e8227101 100644 --- a/internal/dev_server/api/server.gen.go +++ b/internal/dev_server/api/server.gen.go @@ -1858,13 +1858,10 @@ func (sh *strictHandler) PatchProject(w http.ResponseWriter, r *http.Request, pr var body PatchProjectJSONRequestBody if err := json.NewDecoder(r.Body).Decode(&body); err != nil { - if !errors.Is(err, io.EOF) { - sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) - return - } - } else { - request.Body = &body + sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) + return } + request.Body = &body handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, request interface{}) (interface{}, error) { return sh.ssi.PatchProject(ctx, request.(PatchProjectRequestObject)) @@ -1895,13 +1892,10 @@ func (sh *strictHandler) PostAddProject(w http.ResponseWriter, r *http.Request, var body PostAddProjectJSONRequestBody if err := json.NewDecoder(r.Body).Decode(&body); err != nil { - if !errors.Is(err, io.EOF) { - sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) - return - } - } else { - request.Body = &body + sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) + return } + request.Body = &body handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, request interface{}) (interface{}, error) { return sh.ssi.PostAddProject(ctx, request.(PostAddProjectRequestObject))