@@ -26,6 +26,17 @@ import (
2626 "github.com/oapi-codegen/runtime/types"
2727)
2828
29+ // RequiredParameterError is returned when a required query parameter is missing.
30+ // Generated server code can use errors.As to detect this and produce a
31+ // framework-specific typed error for the application's error handler.
32+ type RequiredParameterError struct {
33+ ParamName string
34+ }
35+
36+ func (e * RequiredParameterError ) Error () string {
37+ return fmt .Sprintf ("query parameter '%s' is required" , e .ParamName )
38+ }
39+
2940// BindStyledParameter binds a parameter as described in the Path Parameters
3041// section here to a Go object:
3142// https://swagger.io/docs/specification/serialization/
@@ -438,7 +449,7 @@ func BindQueryParameterWithOptions(style string, explode bool, required bool, pa
438449
439450 if ! found {
440451 if required {
441- return fmt . Errorf ( "query parameter '%s' is required" , paramName )
452+ return & RequiredParameterError { ParamName : paramName }
442453 } else {
443454 // If an optional parameter is not found, we do nothing,
444455 return nil
@@ -473,7 +484,7 @@ func BindQueryParameterWithOptions(style string, explode bool, required bool, pa
473484 // unmarshal.
474485 if len (values ) == 0 {
475486 if required {
476- return fmt . Errorf ( "query parameter '%s' is required" , paramName )
487+ return & RequiredParameterError { ParamName : paramName }
477488 } else {
478489 return nil
479490 }
@@ -484,7 +495,7 @@ func BindQueryParameterWithOptions(style string, explode bool, required bool, pa
484495
485496 if ! found {
486497 if required {
487- return fmt . Errorf ( "query parameter '%s' is required" , paramName )
498+ return & RequiredParameterError { ParamName : paramName }
488499 } else {
489500 // If an optional parameter is not found, we do nothing,
490501 return nil
@@ -506,7 +517,7 @@ func BindQueryParameterWithOptions(style string, explode bool, required bool, pa
506517 values , found := queryParams [paramName ]
507518 if ! found {
508519 if required {
509- return fmt . Errorf ( "query parameter '%s' is required" , paramName )
520+ return & RequiredParameterError { ParamName : paramName }
510521 } else {
511522 return nil
512523 }
@@ -560,7 +571,7 @@ func BindQueryParameterWithOptions(style string, explode bool, required bool, pa
560571 default :
561572 if len (parts ) == 0 {
562573 if required {
563- return fmt . Errorf ( "query parameter '%s' is required" , paramName )
574+ return & RequiredParameterError { ParamName : paramName }
564575 } else {
565576 return nil
566577 }
@@ -682,7 +693,7 @@ func BindRawQueryParameter(style string, explode bool, required bool, paramName
682693 case reflect .Slice :
683694 if ! found {
684695 if required {
685- return fmt . Errorf ( "query parameter '%s' is required" , paramName )
696+ return & RequiredParameterError { ParamName : paramName }
686697 }
687698 return nil
688699 }
@@ -696,7 +707,7 @@ func BindRawQueryParameter(style string, explode bool, required bool, paramName
696707 default :
697708 if len (values ) == 0 {
698709 if required {
699- return fmt . Errorf ( "query parameter '%s' is required" , paramName )
710+ return & RequiredParameterError { ParamName : paramName }
700711 }
701712 return nil
702713 }
@@ -705,7 +716,7 @@ func BindRawQueryParameter(style string, explode bool, required bool, paramName
705716 }
706717 if ! found {
707718 if required {
708- return fmt . Errorf ( "query parameter '%s' is required" , paramName )
719+ return & RequiredParameterError { ParamName : paramName }
709720 }
710721 return nil
711722 }
@@ -726,7 +737,7 @@ func BindRawQueryParameter(style string, explode bool, required bool, paramName
726737 rawValues , found := findRawQueryParam (rawQuery , paramName )
727738 if ! found {
728739 if required {
729- return fmt . Errorf ( "query parameter '%s' is required" , paramName )
740+ return & RequiredParameterError { ParamName : paramName }
730741 }
731742 return nil
732743 }
@@ -765,7 +776,7 @@ func BindRawQueryParameter(style string, explode bool, required bool, paramName
765776 default :
766777 if len (parts ) == 0 {
767778 if required {
768- return fmt . Errorf ( "query parameter '%s' is required" , paramName )
779+ return & RequiredParameterError { ParamName : paramName }
769780 }
770781 return nil
771782 }
0 commit comments