Skip to content

Commit 38c1e21

Browse files
committed
Fix go data in generics methods
1 parent 954f3d6 commit 38c1e21

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

templates/go/base/requests/api.twig

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,29 @@
22
if err != nil {
33
return nil, err
44
}
5-
var parsed {{ method | returnType(spec, spec.title | caseLower) }}
65
if strings.HasPrefix(resp.Type, "application/json") {
7-
err = json.Unmarshal([]byte(resp.Result.(string)), &parsed)
6+
bytes := []byte(resp.Result.(string))
7+
8+
{%~ if method | returnType(spec, spec.title | caseLower) != 'interface{}' and method | returnType(spec, spec.title | caseLower) != '[]byte' and method | returnType(spec, spec.title | caseLower) != 'bool' %}
9+
parsed := {{ method | returnType(spec, spec.title | caseLower) }}{}.New(bytes)
10+
11+
err = json.Unmarshal(bytes, parsed)
12+
if err != nil {
13+
return nil, err
14+
}
15+
16+
return parsed, nil
17+
{%~ else %}
18+
var parsed {{ method | returnType(spec, spec.title | caseLower) }}
19+
20+
err = json.Unmarshal(bytes, &parsed)
821
if err != nil {
922
return nil, err
1023
}
1124
return &parsed, nil
25+
{%~ endif %}
1226
}
27+
var parsed {{ method | returnType(spec, spec.title | caseLower) }}
1328
parsed, ok := resp.Result.({{ method | returnType(spec, spec.title | caseLower) }})
1429
if !ok {
1530
return nil, errors.New("unexpected response type")

templates/go/models/model.go.twig

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package models
22

3+
import "encoding/json"
34

45
{{ ((definition.description | caseUcfirst) ~ " Model") | godocComment }}
56
type {{ definition.name | caseUcfirst }} struct {
@@ -8,8 +9,23 @@ type {{ definition.name | caseUcfirst }} struct {
89
{{ property.name | caseUcfirst }} {{ property | propertyType(spec) }} `json:"{{ property.name | escapeKeyword }}"`
910
{%~ endfor %}
1011

11-
{%~ if definition.additionalProperties %}
12-
// Additional properties
13-
Data map[string]interface{}
14-
{%~ endif %}
12+
// Used by Decode() method
13+
data []byte
1514
}
15+
16+
func (model {{ definition.name | caseUcfirst }}) New(data []byte) *{{ definition.name | caseUcfirst }} {
17+
model.data = data
18+
return &model
19+
}
20+
21+
{%~ if definition.additionalProperties %}
22+
// Use this method to get response in desired type
23+
{%~ endif %}
24+
func (model *{{ definition.name | caseUcfirst }}) Decode(value *any) error {
25+
err := json.Unmarshal(model.data, value)
26+
if err != nil {
27+
return err
28+
}
29+
30+
return nil
31+
}

0 commit comments

Comments
 (0)