ffjson icon indicating copy to clipboard operation
ffjson copied to clipboard

Incorrect generation of type in a slice in a map in a struct

Open posener opened this issue 7 years ago • 2 comments

For the following go file:

package bug

type Struct struct {
	Field map[string][]Obj
}

type Obj string

running ffjson results in a go file that can't be compiled:

handle_Field:

	/* handler: j.Field type=map[string][]bug.Obj kind=map quoted=false*/

	{

		{
			if tok != fflib.FFTok_left_bracket && tok != fflib.FFTok_null {
				return fs.WrapErr(fmt.Errorf("cannot unmarshal %s into Go value for ", tok))
			}
		}

		if tok == fflib.FFTok_null {
			j.Field = nil
		} else {

			j.Field = make(map[string][]bug.Obj, 0)

			wantVal := true

			for {

				var k string
...

Notice the bug.Obj which should be just Obj. Thanks

posener avatar Aug 12 '17 10:08 posener

Just wanted to chime in that I'm also running into this issue.

brycewilson-wf avatar Jul 10 '18 15:07 brycewilson-wf

Here's another example

package foo

//go:generate ffjson foo.go

type props struct {
	Series map[int][]*series `json:"series"`
}

type series struct {
	Name string `json:"name"`
}

which after running go generate ./... creates this snippet of code which does not compile

		if tok == fflib.FFTok_null {
			j.Series = nil
		} else {

			j.Series = make(map[int][]*foo.series, 0)

			wantVal := true

			for {

				var k int

				var tmpJSeries []*foo.series

				tok = fs.Scan()
				if tok == fflib.FFTok_error {
					goto tokerror
$ go build ./...
# github.com/drew-richardson/foo
foo/foo_ffjson.go:182:31: undefined: foo
foo/foo_ffjson.go:190:23: undefined: foo
arichard@gentoo:~/dist/go> 

I believe the correct code may be j.Series = make(map[int][]*series, 0) and j.Series = make(map[int][]*series, 0)

drew-richardson avatar May 15 '21 05:05 drew-richardson