forked from loafle/openapi-generator-original
[Go] Fix deepObject serialization that are anyOf (#19090)
* [Go] Fix deepObject serialization that are anyOf Updates the go client generator to have the generated struct for anyOf types conform to `MappedNullable` interface. Fixes query params serialization for deepObjects that are of `anyOf` type. Implements the suggestion in https://github.com/OpenAPITools/openapi-generator/issues/19085 * check parameter style for deepObject serialization * generate samples for go-echo-external-refs-test * move test back to http port * restrict to anyof models with discriminator * update test * add some tests added some tests to `modules/openapi-generator/src/test/resources/3_0/go/petstore-with-fake-endpoints-models-for-testing-with-http-signature.yaml` and regenerated the samples
This commit is contained in:
@@ -104,13 +104,13 @@ func (a *FormAPIService) TestFormIntegerBooleanStringExecute(r ApiTestFormIntege
|
||||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||||
}
|
||||
if r.integerForm != nil {
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "integer_form", r.integerForm, "")
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "integer_form", r.integerForm, "", "")
|
||||
}
|
||||
if r.booleanForm != nil {
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "boolean_form", r.booleanForm, "")
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "boolean_form", r.booleanForm, "", "")
|
||||
}
|
||||
if r.stringForm != nil {
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "string_form", r.stringForm, "")
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "string_form", r.stringForm, "", "")
|
||||
}
|
||||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||||
if err != nil {
|
||||
@@ -220,7 +220,7 @@ func (a *FormAPIService) TestFormObjectMultipartExecute(r ApiTestFormObjectMulti
|
||||
if localVarHTTPHeaderAccept != "" {
|
||||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||||
}
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "marker", r.marker, "")
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "marker", r.marker, "", "")
|
||||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||||
if err != nil {
|
||||
return localVarReturnValue, nil, err
|
||||
@@ -357,22 +357,22 @@ func (a *FormAPIService) TestFormOneofExecute(r ApiTestFormOneofRequest) (string
|
||||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||||
}
|
||||
if r.form1 != nil {
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "form1", r.form1, "")
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "form1", r.form1, "", "")
|
||||
}
|
||||
if r.form2 != nil {
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "form2", r.form2, "")
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "form2", r.form2, "", "")
|
||||
}
|
||||
if r.form3 != nil {
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "form3", r.form3, "")
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "form3", r.form3, "", "")
|
||||
}
|
||||
if r.form4 != nil {
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "form4", r.form4, "")
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "form4", r.form4, "", "")
|
||||
}
|
||||
if r.id != nil {
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "id", r.id, "")
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "id", r.id, "", "")
|
||||
}
|
||||
if r.name != nil {
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "name", r.name, "")
|
||||
parameterAddToHeaderOrQuery(localVarFormParams, "name", r.name, "", "")
|
||||
}
|
||||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||||
if err != nil {
|
||||
|
||||
@@ -116,19 +116,19 @@ func (a *HeaderAPIService) TestHeaderIntegerBooleanStringEnumsExecute(r ApiTestH
|
||||
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||||
}
|
||||
if r.integerHeader != nil {
|
||||
parameterAddToHeaderOrQuery(localVarHeaderParams, "integer_header", r.integerHeader, "")
|
||||
parameterAddToHeaderOrQuery(localVarHeaderParams, "integer_header", r.integerHeader, "form", "")
|
||||
}
|
||||
if r.booleanHeader != nil {
|
||||
parameterAddToHeaderOrQuery(localVarHeaderParams, "boolean_header", r.booleanHeader, "")
|
||||
parameterAddToHeaderOrQuery(localVarHeaderParams, "boolean_header", r.booleanHeader, "form", "")
|
||||
}
|
||||
if r.stringHeader != nil {
|
||||
parameterAddToHeaderOrQuery(localVarHeaderParams, "string_header", r.stringHeader, "")
|
||||
parameterAddToHeaderOrQuery(localVarHeaderParams, "string_header", r.stringHeader, "form", "")
|
||||
}
|
||||
if r.enumNonrefStringHeader != nil {
|
||||
parameterAddToHeaderOrQuery(localVarHeaderParams, "enum_nonref_string_header", r.enumNonrefStringHeader, "")
|
||||
parameterAddToHeaderOrQuery(localVarHeaderParams, "enum_nonref_string_header", r.enumNonrefStringHeader, "form", "")
|
||||
}
|
||||
if r.enumRefStringHeader != nil {
|
||||
parameterAddToHeaderOrQuery(localVarHeaderParams, "enum_ref_string_header", r.enumRefStringHeader, "")
|
||||
parameterAddToHeaderOrQuery(localVarHeaderParams, "enum_ref_string_header", r.enumRefStringHeader, "form", "")
|
||||
}
|
||||
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
|
||||
if err != nil {
|
||||
|
||||
@@ -82,10 +82,10 @@ func (a *QueryAPIService) TestEnumRefStringExecute(r ApiTestEnumRefStringRequest
|
||||
localVarFormParams := url.Values{}
|
||||
|
||||
if r.enumNonrefStringQuery != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "enum_nonref_string_query", r.enumNonrefStringQuery, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "enum_nonref_string_query", r.enumNonrefStringQuery, "form", "")
|
||||
}
|
||||
if r.enumRefStringQuery != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "enum_ref_string_query", r.enumRefStringQuery, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "enum_ref_string_query", r.enumRefStringQuery, "form", "")
|
||||
}
|
||||
// to determine the Content-Type header
|
||||
localVarHTTPContentTypes := []string{}
|
||||
@@ -205,13 +205,13 @@ func (a *QueryAPIService) TestQueryDatetimeDateStringExecute(r ApiTestQueryDatet
|
||||
localVarFormParams := url.Values{}
|
||||
|
||||
if r.datetimeQuery != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "datetime_query", r.datetimeQuery, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "datetime_query", r.datetimeQuery, "form", "")
|
||||
}
|
||||
if r.dateQuery != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "date_query", r.dateQuery, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "date_query", r.dateQuery, "form", "")
|
||||
}
|
||||
if r.stringQuery != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "string_query", r.stringQuery, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "string_query", r.stringQuery, "form", "")
|
||||
}
|
||||
// to determine the Content-Type header
|
||||
localVarHTTPContentTypes := []string{}
|
||||
@@ -331,13 +331,13 @@ func (a *QueryAPIService) TestQueryIntegerBooleanStringExecute(r ApiTestQueryInt
|
||||
localVarFormParams := url.Values{}
|
||||
|
||||
if r.integerQuery != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "integer_query", r.integerQuery, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "integer_query", r.integerQuery, "form", "")
|
||||
}
|
||||
if r.booleanQuery != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "boolean_query", r.booleanQuery, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "boolean_query", r.booleanQuery, "form", "")
|
||||
}
|
||||
if r.stringQuery != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "string_query", r.stringQuery, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "string_query", r.stringQuery, "form", "")
|
||||
}
|
||||
// to determine the Content-Type header
|
||||
localVarHTTPContentTypes := []string{}
|
||||
@@ -445,7 +445,7 @@ func (a *QueryAPIService) TestQueryStyleDeepObjectExplodeTrueObjectExecute(r Api
|
||||
localVarFormParams := url.Values{}
|
||||
|
||||
if r.queryObject != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "deepObject", "")
|
||||
}
|
||||
// to determine the Content-Type header
|
||||
localVarHTTPContentTypes := []string{}
|
||||
@@ -553,7 +553,7 @@ func (a *QueryAPIService) TestQueryStyleDeepObjectExplodeTrueObjectAllOfExecute(
|
||||
localVarFormParams := url.Values{}
|
||||
|
||||
if r.queryObject != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "deepObject", "")
|
||||
}
|
||||
// to determine the Content-Type header
|
||||
localVarHTTPContentTypes := []string{}
|
||||
@@ -661,7 +661,7 @@ func (a *QueryAPIService) TestQueryStyleFormExplodeFalseArrayIntegerExecute(r Ap
|
||||
localVarFormParams := url.Values{}
|
||||
|
||||
if r.queryObject != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "csv")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "form", "csv")
|
||||
}
|
||||
// to determine the Content-Type header
|
||||
localVarHTTPContentTypes := []string{}
|
||||
@@ -769,7 +769,7 @@ func (a *QueryAPIService) TestQueryStyleFormExplodeFalseArrayStringExecute(r Api
|
||||
localVarFormParams := url.Values{}
|
||||
|
||||
if r.queryObject != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "csv")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "form", "csv")
|
||||
}
|
||||
// to determine the Content-Type header
|
||||
localVarHTTPContentTypes := []string{}
|
||||
@@ -877,7 +877,7 @@ func (a *QueryAPIService) TestQueryStyleFormExplodeTrueArrayStringExecute(r ApiT
|
||||
localVarFormParams := url.Values{}
|
||||
|
||||
if r.queryObject != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "form", "")
|
||||
}
|
||||
// to determine the Content-Type header
|
||||
localVarHTTPContentTypes := []string{}
|
||||
@@ -985,7 +985,7 @@ func (a *QueryAPIService) TestQueryStyleFormExplodeTrueObjectExecute(r ApiTestQu
|
||||
localVarFormParams := url.Values{}
|
||||
|
||||
if r.queryObject != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "form", "")
|
||||
}
|
||||
// to determine the Content-Type header
|
||||
localVarHTTPContentTypes := []string{}
|
||||
@@ -1093,7 +1093,7 @@ func (a *QueryAPIService) TestQueryStyleFormExplodeTrueObjectAllOfExecute(r ApiT
|
||||
localVarFormParams := url.Values{}
|
||||
|
||||
if r.queryObject != nil {
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "")
|
||||
parameterAddToHeaderOrQuery(localVarQueryParams, "query_object", r.queryObject, "form", "")
|
||||
}
|
||||
// to determine the Content-Type header
|
||||
localVarHTTPContentTypes := []string{}
|
||||
|
||||
@@ -158,7 +158,7 @@ func parameterValueToString( obj interface{}, key string ) string {
|
||||
|
||||
// parameterAddToHeaderOrQuery adds the provided object to the request header or url query
|
||||
// supporting deep object syntax
|
||||
func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix string, obj interface{}, collectionType string) {
|
||||
func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix string, obj interface{}, style string, collectionType string) {
|
||||
var v = reflect.ValueOf(obj)
|
||||
var value = ""
|
||||
if v == reflect.ValueOf(nil) {
|
||||
@@ -174,11 +174,11 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, dataMap, collectionType)
|
||||
parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, dataMap, style, collectionType)
|
||||
return
|
||||
}
|
||||
if t, ok := obj.(time.Time); ok {
|
||||
parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), collectionType)
|
||||
parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339Nano), style, collectionType)
|
||||
return
|
||||
}
|
||||
value = v.Type().String() + " value"
|
||||
@@ -190,7 +190,11 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri
|
||||
var lenIndValue = indValue.Len()
|
||||
for i:=0;i<lenIndValue;i++ {
|
||||
var arrayValue = indValue.Index(i)
|
||||
parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, arrayValue.Interface(), collectionType)
|
||||
var keyPrefixForCollectionType = keyPrefix
|
||||
if style == "deepObject" {
|
||||
keyPrefixForCollectionType = keyPrefix + "[" + strconv.Itoa(i) + "]"
|
||||
}
|
||||
parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefixForCollectionType, arrayValue.Interface(), style, collectionType)
|
||||
}
|
||||
return
|
||||
|
||||
@@ -202,14 +206,14 @@ func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix stri
|
||||
iter := indValue.MapRange()
|
||||
for iter.Next() {
|
||||
k,v := iter.Key(), iter.Value()
|
||||
parameterAddToHeaderOrQuery(headerOrQueryParams, fmt.Sprintf("%s[%s]", keyPrefix, k.String()), v.Interface(), collectionType)
|
||||
parameterAddToHeaderOrQuery(headerOrQueryParams, fmt.Sprintf("%s[%s]", keyPrefix, k.String()), v.Interface(), style, collectionType)
|
||||
}
|
||||
return
|
||||
|
||||
case reflect.Interface:
|
||||
fallthrough
|
||||
case reflect.Ptr:
|
||||
parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, v.Elem().Interface(), collectionType)
|
||||
parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, v.Elem().Interface(), style, collectionType)
|
||||
return
|
||||
|
||||
case reflect.Int, reflect.Int8, reflect.Int16,
|
||||
|
||||
Reference in New Issue
Block a user