diff options
author | Přemysl Eric Janouch <p@janouch.name> | 2023-06-15 09:42:06 +0200 |
---|---|---|
committer | Přemysl Eric Janouch <p@janouch.name> | 2023-07-06 06:54:22 +0200 |
commit | 53197b51e5edbb1b195070523dbfd8d9ba05d847 (patch) | |
tree | 2762a1f1abdfdc89db3da6f7c48c6875580a5489 /tools/lxdrgen-go.awk | |
parent | 8466d0d850123cec7856fa2c0c522b245419e1ad (diff) | |
download | liberty-53197b51e5edbb1b195070523dbfd8d9ba05d847.tar.gz liberty-53197b51e5edbb1b195070523dbfd8d9ba05d847.tar.xz liberty-53197b51e5edbb1b195070523dbfd8d9ba05d847.zip |
Add a Swift backend for LibertyXDR
Diffstat (limited to 'tools/lxdrgen-go.awk')
-rw-r--r-- | tools/lxdrgen-go.awk | 15 |
1 files changed, 7 insertions, 8 deletions
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}" |