From 53197b51e5edbb1b195070523dbfd8d9ba05d847 Mon Sep 17 00:00:00 2001 From: Přemysl Eric Janouch Date: Thu, 15 Jun 2023 09:42:06 +0200 Subject: Add a Swift backend for LibertyXDR --- tools/lxdrgen-go.awk | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'tools/lxdrgen-go.awk') diff --git a/tools/lxdrgen-go.awk b/tools/lxdrgen-go.awk index 6aa0d04..f9163bb 100644 --- a/tools/lxdrgen-go.awk +++ b/tools/lxdrgen-go.awk @@ -441,7 +441,7 @@ function codegen_struct(name, cg, gotype) { function codegen_union_tag(d, cg) { cg["tagtype"] = d["type"] - cg["tagname"] = d["name"] + cg["tagname"] = snaketocamel(d["name"]) # The tag is implied from the type of struct stored in the interface. } @@ -450,8 +450,8 @@ function codegen_union_struct(name, casename, cg, scg, structname, init) { structname = name snaketocamel(casename) codegen_struct(structname, scg) - init = CodegenGoType[structname] "{" snaketocamel(cg["tagname"]) \ - ": " decapitalize(snaketocamel(cg["tagname"])) "}" + init = CodegenGoType[structname] "{" cg["tagname"] \ + ": " decapitalize(cg["tagname"]) "}" append(cg, "unmarshal", "\tcase " CodegenGoType[cg["tagtype"]] snaketocamel(casename) ":\n" \ "\t\ts := " init "\n" \ @@ -467,7 +467,7 @@ function codegen_union_struct(name, casename, cg, scg, structname, init) { "\t\tu.Interface = &s\n") } -function codegen_union(name, cg, gotype, tagfield, tagvar) { +function codegen_union(name, cg, gotype, tagvar) { gotype = PrefixCamel name print "type " gotype " struct {" print "\tInterface any" @@ -481,18 +481,17 @@ function codegen_union(name, cg, gotype, tagfield, tagvar) { print "}" print "" - tagfield = snaketocamel(cg["tagname"]) - tagvar = decapitalize(tagfield) + tagvar = decapitalize(cg["tagname"]) print "func (u *" gotype ") UnmarshalJSON(data []byte) (err error) {" print "\tvar t struct {" - print "\t\t" tagfield " " CodegenGoType[cg["tagtype"]] \ + print "\t\t" cg["tagname"] " " CodegenGoType[cg["tagtype"]] \ " `json:\"" tagvar "\"`" print "\t}" print "\tif err := json.Unmarshal(data, &t); err != nil {" print "\t\treturn err" print "\t}" print "" - print "\tswitch " tagvar " := t." tagfield "; " tagvar " {" + print "\tswitch " tagvar " := t." cg["tagname"] "; " tagvar " {" print cg["unmarshal"] "\tdefault:" print "\t\terr = errors.New(`unsupported value: ` + " tagvar ".String())" print "\t}" -- cgit v1.2.3-54-g00ecf