forked from TrueCloudLab/frostfs-api-go
[#120] protogen: Unmarshal stringified integers from JSON
Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
parent
eeb754c327
commit
d94b9c6d0d
13 changed files with 536 additions and 61 deletions
|
@ -59,6 +59,17 @@ func emitJSONUnmarshal(g *protogen.GeneratedFile, msg *protogen.Message) {
|
|||
g.P("}")
|
||||
}
|
||||
|
||||
func emitJSONParseInteger(g *protogen.GeneratedFile, ident string, method string, bitSize int, typ string) {
|
||||
g.P("r := in.JsonNumber()")
|
||||
g.P("n := r.String()")
|
||||
g.P("v, err := ", strconvPackage.Ident(method), "(n, 10, ", bitSize, ")")
|
||||
g.P("if err != nil {")
|
||||
g.P(" in.AddError(err)")
|
||||
g.P(" return")
|
||||
g.P("}")
|
||||
g.P(ident, " := ", typ, "(v)")
|
||||
}
|
||||
|
||||
func emitJSONFieldRead(g *protogen.GeneratedFile, f *protogen.Field, name string) {
|
||||
g.P("{")
|
||||
defer g.P("}")
|
||||
|
@ -100,13 +111,17 @@ func emitJSONFieldRead(g *protogen.GeneratedFile, f *protogen.Field, name string
|
|||
}`)
|
||||
template = "%s = parsedValue"
|
||||
case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind:
|
||||
template = "%s = in.Int32()"
|
||||
emitJSONParseInteger(g, "pv", "ParseInt", 32, "int32")
|
||||
template = "%s = pv"
|
||||
case protoreflect.Uint32Kind, protoreflect.Fixed32Kind:
|
||||
template = "%s = in.Uint32()"
|
||||
emitJSONParseInteger(g, "pv", "ParseUint", 32, "uint32")
|
||||
template = "%s = pv"
|
||||
case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind:
|
||||
template = "%s = in.Int64()"
|
||||
emitJSONParseInteger(g, "pv", "ParseInt", 64, "int64")
|
||||
template = "%s = pv"
|
||||
case protoreflect.Uint64Kind, protoreflect.Fixed64Kind:
|
||||
template = "%s = in.Uint64()"
|
||||
emitJSONParseInteger(g, "pv", "ParseUint", 64, "uint64")
|
||||
template = "%s = pv"
|
||||
case protoreflect.FloatKind:
|
||||
template = "%s = in.Float32()"
|
||||
case protoreflect.DoubleKind:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue