fix(genapi): uint64 fields failing to be unmarshalled (#2492)

uint64 fields get marshalled into json by protobuf as strings, so we
have to tell the json parser to look for strings when unmarshalling.
This commit is contained in:
Hugo authored and GitHub committed 2022-09-26 15:27:28 +01:00
1 parent 6116dad2bc
commit 902ca3cccb
3 files changed
+15 -3

No files matched your search

+2 -2
View File
@@ -6,7 +6,7 @@ type Connection struct {
ClientTcpPort uint32 `json:"client_tcp_port,omitempty"`
EndpointTcpAddress string `json:"endpoint_tcp_address,omitempty"`
EndpointTcpPort uint32 `json:"endpoint_tcp_port,omitempty"`
BytesUp uint64 `json:"bytes_up,omitempty"`
BytesDown uint64 `json:"bytes_down,omitempty"`
BytesUp uint64 `json:"bytes_up,string,omitempty"`
BytesDown uint64 `json:"bytes_down,string,omitempty"`
ClosedReason string `json:"closed_reason,omitempty"`
}
+8
View File
@@ -58,6 +58,7 @@ type fieldInfo struct {
SubtypeNames []string
Query bool
SkipDefault bool
JsonTags []string // Appended to a field's `json` tag (comma separated)
}
type structInfo struct {
@@ -832,6 +833,13 @@ var inputStructs = []*structInfo{
{
inProto: &sessions.Connection{},
outFile: "sessions/connection.gen.go",
fieldOverrides: []fieldInfo{
// uint64 fields get marshalled by protobuf as strings, so we have
// to tell the json parser that their json representation is a
// string but they go into Go uint64 types.
{Name: "BytesUp", JsonTags: []string{"string"}},
{Name: "BytesDown", JsonTags: []string{"string"}},
},
},
{
inProto: &sessions.Session{},
+5 -1
View File
@@ -85,6 +85,9 @@ func fillTemplates() {
if override.FieldType != "" {
field.FieldType = override.FieldType
}
if len(override.JsonTags) != 0 {
field.JsonTags = override.JsonTags
}
in.generatedStructure.fields[i] = field
}
}
@@ -578,6 +581,7 @@ func hasResponseType(types []string, typ string) bool {
var structTemplate = template.Must(template.New("").Funcs(
template.FuncMap{
"hasResponseType": hasResponseType,
"stringsjoin": strings.Join,
},
).Parse(
fmt.Sprint(`// Code generated by "make api"; DO NOT EDIT.
@@ -595,7 +599,7 @@ import (
)
type {{ .Name }} struct { {{ range .Fields }}
{{ .Name }} {{ .FieldType }} `, "`json:\"{{ .ProtoName }},omitempty\"`", `{{ end }}
{{ .Name }} {{ .FieldType }} `, "`json:\"{{ .ProtoName }}{{ if ( ne ( len ( .JsonTags ) ) 0 ) }},{{ stringsjoin .JsonTags \",\" }}{{ end }},omitempty\"`", `{{ end }}
{{ if ( not ( eq ( len ( .CreateResponseTypes ) ) 0 ) )}}
response *api.Response
{{ else if ( eq .Name "Error" ) }}