Skip to content

Commit e703a73

Browse files
authored
Merge pull request #918 from appwrite/fix-go-data
Fix: Go data in generics
2 parents 62144b6 + eedae4c commit e703a73

File tree

2 files changed

+44
-6
lines changed

2 files changed

+44
-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: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package models
22

3+
import (
4+
"encoding/json"
5+
"errors"
6+
)
37

48
{{ ((definition.description | caseUcfirst) ~ " Model") | godocComment }}
59
type {{ definition.name | caseUcfirst }} struct {
@@ -8,8 +12,27 @@ type {{ definition.name | caseUcfirst }} struct {
812
{{ property.name | caseUcfirst }} {{ property | propertyType(spec) }} `json:"{{ property.name | escapeKeyword }}"`
913
{%~ endfor %}
1014

11-
{%~ if definition.additionalProperties %}
12-
// Additional properties
13-
Data map[string]interface{}
14-
{%~ endif %}
15+
// Used by Decode() method
16+
data []byte
1517
}
18+
19+
func (model {{ definition.name | caseUcfirst }}) New(data []byte) *{{ definition.name | caseUcfirst }} {
20+
model.data = data
21+
return &model
22+
}
23+
24+
{%~ if definition.additionalProperties %}
25+
// Use this method to get response in desired type
26+
{%~ endif %}
27+
func (model *{{ definition.name | caseUcfirst }}) Decode(value interface{}) error {
28+
if len(model.data) <= 0 {
29+
return errors.New("method Decode() cannot be used on nested struct")
30+
}
31+
32+
err := json.Unmarshal(model.data, value)
33+
if err != nil {
34+
return err
35+
}
36+
37+
return nil
38+
}

0 commit comments

Comments
 (0)